El presente documento tiene como propósito cubrir los objetivos establecidos en el TFM del Área 3 del Máster Universitario en Ciencia de Datos (Data Science) asociado y que tiene por título: Segmentación del estudiantado universitario: el caso de la Udima.
Para contextualizar el mismo, se establecen el objetivo general y los objetivos específicos del proyecto, atendiendo a los principios de ser claros, concisos, medibles, alcanzables, relevantes y planificables.
Objetivo general:
El objetivo del proyecto es conocer las características del estudiantado que finalizan o abandonan una titulación universitaria en la Universidad a Distancia de Madrid, en adelante Udima, en base a su rendimiento académico, opiniones manifestadas, características sociodemográficas y de comportamiento Moodle, el LMS (Learning Management System) utilizado para el proceso de enseñanza-aprendizaje. De esta forma, también se pretende identificar qué proporción del estudiantado egresado o que abandona la universidad corresponde a cada tipo para poder predecir qué tipo son los estudiantes que no han finalizado sus estudios, con especial interés, en los que están en riesgo de abandono.
A continuación se detallan las fases del ciclo de vida del proyecto según la metodología CRISP-DM (Cross Industry Standard Process for Data Mining) a aplicar en el presente TFM.
Como se ha comentado en el apartado anterior, el objetivo del proyecto es conocer las características del estudiantado que finalizan o abandonan una titulación universitaria en la Universidad a Distancia de Madrid, en adelante Udima, en base a su rendimiento académico, opiniones manifestadas, características sociodemográficas y de comportamiento Moodle, el LMS (Learning Management System) utilizado para el proceso de enseñanza-aprendizaje. De esta forma, también se pretende identificar qué proporción del estudiantado egresado o que abandona la universidad corresponde a cada tipo para poder predecir qué tipo son los estudiantes que no han finalizado sus estudios, con especial interés, en los que están en riesgo de abandono.
Este objetivo se puede resolver mediante minería de datos a través del establecimiento de los siguientes objetivos específicos:
Identificar los perfiles del estudiantado que finaliza o abandona sus estudios. Para ello, se aplicarán métodos no supervisados basados en el concepto de distancia (métodos de agregación o análisis cluster).
Determinar las características principales que definen a un estudiante que finaliza o abandona sus estudios. Partiendo de la clasificación obtenida en el objetivo anterior, se obtendrán las características principales de cada grupo según las estadísticas básicas de las variables.
Predecir la clasificación de los estudiantes que no han finalizado los estudios. Para llevarlo a cabo se aplicarán técnicas de aprendizaje supervisado y se utilizará el algoritmo de clasificación que aporte mejores resultados. Para determinar el mejor modelo se aplicará validación cruzada.
Tanto el objetivo principal como los objetivos específicos justifican la utilización de los datos del proyecto, para lo cual, se deben obtener y tratar previamente a partir de las distintas bases de datos disponibles.
# Se cargan las librerías
# carga de datos
if (!require('readxl')) install.packages('readxl'); library('readxl')
if (!require('xlsx')) install.packages('xlsx'); library('xlsx')
# transformación datos
if (!require('tidyr')) install.packages('tidyr'); library('tidyr')
if (!require('tidyverse')) install.packages('tidyverse'); library('tidyverse')
if (!require('reshape2')) install.packages('reshape2'); library('reshape2')
if (!require('fastDummies')) install.packages('fastDummies'); library('fastDummies')
if (!require('scales')) install.packages('scales'); library('scales')
# análisis de datos
# correlaciones
if (!require('PerformanceAnalytics')) install.packages('PerformanceAnalytics'); library('PerformanceAnalytics')
if (!require('sjPlot')) install.packages('sjPlot'); library('sjPlot')
# PCA
if (!require('stats')) install.packages('stats'); library('stats') # método 1
if (!require('factoextra')) install.packages('factoextra'); library('factoextra') # método 2
if (!require('FactoMineR')) install.packages('FactoMineR'); library('FactoMineR') # método 3
# cluster
if (!require('cluster')) install.packages('cluster'); library('cluster')
if (!require('NbClust')) install.packages('NbClust'); library('NbClust')
if (!require('clValid')) install.packages('clValid'); library('clValid')
# prediction cv
if (!require('caret')) install.packages("caret"); library('caret')
if (!require('caTools')) install.packages("caTools"); library('caTools')
# knn
if (!require('class')) install.packages("class"); library('class')
# randomForest
if (!require('randomForest')) install.packages("randomForest"); library('randomForest')
# mostrar datos
if (!require('summarytools')) install.packages('summarytools'); library('summarytools')
if (!require('DT')) install.packages('DT'); library('DT')
# ACCIONES IMPLEMENTADAS PARA ERROR AL INSTALAR LA LIBRERÍA summarytools
# <stdin>:1:10: fatal error: Magick++.h: No existe el archivo o el directorio compilation terminated. -------------------------------------------------------------------- ERROR: configuration failed for package ‘magick’ * removing ‘/home/alejandra.bonilla/R/x86_64-pc-linux-gnu-library/4.2/magick’ Warning in install.packages : installation of package ‘magick’ had non-zero exit status
# https://askubuntu.com/questions/1398876/magick-h-no-such-file-or-directory-even-after-installing-magick
# /usr/lib/R/etc/Makeconf:178: fallo en las instrucciones para el objetivo 'RcppExports.o'
# make: *** [RcppExports.o] Error 1
# ERROR: compilation failed for package ‘magick’
# * removing ‘/home/alejandra.bonilla/R/x86_64-pc-linux-gnu-library/4.2/magick’
# Terminal: apt-get install libmagick++-dev
# https://github.com/ropensci/magick/issues/270
# Term: sudo apt-get install r-base-dev libcurl4-openssl-dev libxml2-dev libssl-dev libmagick++-6.q16-dev
# https://askubuntu.com/questions/1287708/dependency-problems-installing-libmagick-dev-on-ubuntu-18-04
El objetivo de esta fase del proyecto es estudiar los datos disponibles para evitar problemas en fases posteriores. Para ello se debe recopilar, acceder, describir, explorar y verificar la calidad de datos. Estas tareas se realizan a continuación:
Como el estudio analizará datos relativos al rendimiento académico, opiniones, características sociodemográficas y de comportamiento en la plataforma de estudio del estudiantado es necesario acceder y tratar distintas fuentes de datos. Se quiere perfilar a cada estudiante en función de variables que le definan, por lo que en esta fase es determinante seleccionar adecuadamente los niveles de agregación y las características a aplicar en las distintas fuentes de datos.
Los distintos datos se corresponden con:
Rendimiento académico:
Para poder clasificar a los estudiantes según su rendimiento es necesario contar con el progreso académico del estudiante desde que inicia los estudios, contando con la identificación de si egresa o abandona (aplica a los objetivos específicos 1 y 2).
Para poder predecir qué estudiantes se encuentran en riesgo de abandono es necesario contar con el progreso académico del estudiante desde que inicia los estudios hasta el momento actual (aplica al objetivo específico 3).
NOTA: Si el estudiante inicia sus estudios en una titulación que es sustituida por otra, debido a la extinción del plan de estudios inicial, los datos asociados al estudiante se tratarán de forma que se tenga un registro único y la adaptación al plan de estudios no afecte a su experiencia y progreso. Es decir, el registro de estos estudiantes se tratará para que se asocie al plan de estudios adaptado (o nuevo) y donde tendrá la posibilidad de egresar, pero incluyendo el rendimiento y curso de nuevo ingreso del plan de estudios inicial (o a extinguir).
Opiniones manifestadas: resultados de satisfacción e inserción laboral:
Variables sociodemográficas:
El resultado final que se espera obtener después de estas tareas de ETL (Extract, Transform and Load) son dos bases de datos con la misma estructura y que:
contenga los datos del estudiantado que ha egresado o abandonado estudios (para acometer los objetivos específicos 1 y 2);
contenga los datos del estudiantado que se encuentra cursando estudios (para acometer el objetivo específico 3).
Previamente, para cada uno de los estudios: de satisfacción (estudiantes-asignaturas, estudiantes-curso, estudiantes-titulación); y de inserción laboral se ha construido un histórico de resultados comparado a partir de los resultados periódicos (semestrales o anuales) recogidos. La construcción del histórico de resultados tiene en cuenta:
las pequeñas variaciones que ha sufrido el formato del cuestionario a lo largo del tiempo. Para poder realizar un histórico comparado es necesario que todas las bbdd de los distintos periodos tengan la misma estructura. Es decir, si un ítem aparece en un período debe de existir esa misma variable en todos los periodos del histórico, recogiendo los valores correspondientes e incluyendo valores ausentes en los periodos que no se recogiese dicha información.
la codificación de las variables resume tres aspectos del ítem medido (concatenados mediante guión bajo “_“):
el tipo de estudio al que pertenece el ítem (pudiendo variar entre: sa_asig, para la satisfacción del estudiantado con las asignaturas; sa_curso, para la satisfacción del estudiantado con el curso; sa_titulacion, para la satisfacción de egresados con la titulación; il_, para el estudio de inserción laboral de los egresados);
el aspecto que mide, abreviación del ítem del cuestionario. Por ejemplo, organizacion para ‘La organización de la asignatura facilita el aprendizaje de esta asignatura’;
Estas tareas de construcción de los históricos comparados de los distintos estudios semestrales/anuales se realizan mediante los scripts:
A modo ilustrativo, se incluyen fragmentos de uno de ellos (todos siguen la misma estructura), para que se puede comprobar la estructura general del script y la carga y fusión de datos para un periodo concreto:
# En este script se leen los diferentes ficheros de encuestas enviadas y recibidas al histórico del estudiantado-asignaturas
# y cargar en memoria un data frame con todos los datos de los ficheros combinados.
# Para facilitar el desarrollo se genera también un fichero con el data frame final de este script, para que pueda
# ser leído directamente en siguientes ejecuciones en vez de llamar a este script. Así, si la parte de este script
# ya está revisada y los datos son correctos, para el desarrollo de las siguientes partes de generación de los informes
# podemos simplemente leer este fichero y evitar repetir los cálculos intermedios.
# 1. Establecemos el entorno y los directorios con los que vamos a trabajar
# para crear estos informes:
# Esta parte no hay que ejecutarla si se llama desde Generar_informes_profesores.R,
# toda esta información estará ya cargada en el entorno del script padre.
# Directorio donde se encuentran los ficheros a leer
vPathAsignatura = "/media/pluto/departamentos/calidad/1_UDIMA/Medición y Análisis/Histórico de resultados/SA-E: Satisfacción semestral de estudiantes/Resultados/"
# Estas librerías hay que cargarlas si ejecutamos el script de forma independiente,
library(dplyr)
# IMPORTANTE
# En cada csv de Enviadas se convierte en texto los campos: token, documento, id_gr_activ, dni_profe
# En cada documento de Recibidas se convierte en texto el campo token y se sustituye " por '
####################################################################################################################
############################## Resultados 2016-17_2S #########################
####################################################################################################################
# Se cargan los datos de encuestas enviadas
asig_env_16172S = read.csv(paste0(vPathAsignatura,"SA_Específica_2016-17_2S_C1_Enviadas.csv"),
stringsAsFactors = FALSE,
na.strings = "NA",
colClasses=c("tid"="NULL",
"emailstatus"="NULL",
"language"="NULL",
"validfrom"="NULL",
"validuntil"="NULL",
"invited"="NULL",
"reminded"="NULL",
"remindercount"="NULL",
"attribute_11..id_grp_activ."="character"))
# Para facilitar la fusión con ficheros de semestres posteriores, se deben crear las columnas ausentes
asig_env_16172S$'vac_cen_codnum'='1'
asig_env_16172S$'prf_email'=NA
asig_env_16172S$'tas_codalf'=NA
asig_env_16172S$'tac_codalf'=NA
# Se renombran las variables para facilitar su identificación:
asig_env_16172S = asig_env_16172S %>% dplyr::rename(plan=attribute_1..plan.,
expediente=attribute_2..expediente.,
nombre_plan=attribute_3..nombre_plan.,
codigo=attribute_4..codigo.,
documento=attribute_5..documento.,
fecha_nacimiento=attribute_6..fecha_nacimiento.,
sexo=attribute_7..sexo.,
asignatura=attribute_8..asignatura.,
nombre_asignatura=attribute_9..nombre_asignatura.,
gac_codnum=attribute_10..gac_codnum.,
id_grp_activ=attribute_11..id_grp_activ.,
nombre_profe=attribute_12..nombre_profe.,
dni_prf=attribute_13..dni_prf.,
prf_codnum=attribute_14..prf_codnum.,
vac_codnum=attribute_15..vac_codnum.,
gas_codnum=attribute_16..gas_codnum.,
dur_codalf=attribute_17..dur_codalf.)
# RECIBIDAS
# Se mantiene el identificador único y las respuestas al cuestionario, eliminando toda la información relativa a los atributos de cada registro
asig_rec_16172S = read.csv(paste0(vPathAsignatura,"SA_Específica_2016-17_2S_C1_Recibidas.csv"),
stringsAsFactors = FALSE,
na.strings = "NA")
# Renombrado de columnas en asig_rec_16172S
asig_rec_16172S = asig_rec_16172S %>% select(token = Contraseña,
asig_objetivos=Muestra.tu.grado.de.acuerdo.o.satisfacción.con.las.afirmaciones.siguientes.en.una.escala.de.1.a.5..donde.1.equivale.a..nada.satisfecho..o..en.total.desacuerdo..y.5.a..totalmente.satisfecho..o..totalmente.de.acuerdo....La.metodología.permite.alcanzar.los.objetivos.de.aprendizaje.de.la.asignatura.,
asig_aaff_profe=Muestra.tu.grado.de.acuerdo.o.satisfacción.con.las.afirmaciones.siguientes.en.una.escala.de.1.a.5..donde.1.equivale.a..nada.satisfecho..o..en.total.desacuerdo..y.5.a..totalmente.satisfecho..o..totalmente.de.acuerdo....Mi.grado.de.satisfacción.general.respecto.del.profesor.es.,
asig_manual=Muestra.tu.grado.de.acuerdo.o.satisfacción.con.las.afirmaciones.siguientes.en.una.escala.de.1.a.5..donde.1.equivale.a..nada.satisfecho..o..en.total.desacuerdo..y.5.a..totalmente.satisfecho..o..totalmente.de.acuerdo....Las.unidades.didácticas..manual..son.claras.y.están.bien.estructuradas.,
asig_aaff_actividades=Muestra.tu.grado.de.acuerdo.o.satisfacción.con.las.afirmaciones.siguientes.en.una.escala.de.1.a.5..donde.1.equivale.a..nada.satisfecho..o..en.total.desacuerdo..y.5.a..totalmente.satisfecho..o..totalmente.de.acuerdo....Las.actividades.desarrolladas.durante.la.evaluación.continua.han.facilitado.el.aprendizaje.,
asig_aaff_comentarios=X.Si.lo.desea.puede.incluir.cualquier.comentario..observación.o.sugerencia,
henvío=Fecha.de.envío,
Tiempo.total)
# Se crean las variables ausentes en este periodo que aparecerán en estudios posteriores
asig_rec_16172S$'asig_organizacion'=NA
asig_rec_16172S$'pdi_aspectos'=NA
asig_rec_16172S$'pdi_dudas'=NA
# Añadimos a enviadas los datos de las encuestas recibidas
asig_result_16172S = list(asig_env_16172S, asig_rec_16172S) %>% reduce(left_join)
se realizan las mismas operaciones (con los ajustes necesarios en cuanto a aparición/desaparición de variables) en el resto de periodos.
se realiza la fusión de todas las bbdd resultantes de los periodos en un único fichero que se guardará para su posterior uso. Se comenta la generación de bbdd resultante ya que no están cargadas en este script algunas de ellas.
# Se ordenan de más reciente a más antiguo, para que el documento final tenga la estructura del formato de encuesta más reciente y los ítems en desuso más hacia la derecha
# Se comenta la generación de bbdd resultante ya que no están cargadas en este script algunas de ellas
# HistoricoAsignatura = rbind(asig_result_20212S,
# asig_result_20211S,
# asig_result_19202S,
# asig_result_19201S,
# asig_result_18192S,
# asig_result_18191S,
# asig_result_17182S,
# asig_result_17181S,
# asig_result_16172S,
# asig_result_16171S,
# asig_result_15162S,
# asig_result_15161S,
# asig_result_14152S,
# asig_result_14151S,
# asig_result_13142S,
# asig_result_13141S,
# asig_result_12132S,
# asig_result_12131Smof,
# asig_result_12131Sgra)
# # Arreglo de comentarios vacíos
# HistoricoAsignatura$asig_aaff_comentarios = str_replace_all(HistoricoAsignatura$asig_aaff_comentarios, "[\\s]+", " ")
# HistoricoAsignatura$asig_aaff_comentarios[HistoricoAsignatura$asig_aaff_comentarios %in% c("", " ", "-",
# "[\\[:punct:]+]",
# ".", "..", "...",
# ",", ",,", ",,,")] = NA
se aplican técnicas de procesamiento del lenguaje natural NLP para extraer la connotación negativa o positiva de los comentarios expresados por los usuarios. Para ello se ha aplicado el diccionario de léxico NRC mediante la aplicación de las librerías syuzhet y tm. De su aplicación, se obtiene un valor asociado al rango -1:1, donde -1 se corresponde con la máxima connotación negativa y 1 positiva. Para llevarlo a cabo se han aplicado los siguientes pasos:
se crean variables donde recoger los tokens de cada comentario,
se crea un dataframe vacío, por si al eliminar stopwords el vector está vacío;
mediante bucle se recorre el juego de datos, y si tiene comentarios, se eliminan las stopwords del comentario, se obtienen los tokens dividiendo la cadena de caracteres en un listado de palabras o unigramas (tokens), se extraen datos con el Léxico de Sentimientos NRC y se obtiene el valor numérico asociado al comentario.
Se facilitan comentadas dado que es un extracto de un script externo, para evitar errores de ejecución.
# #########################################################
# ######## Diccionario de léxico NRC ##########
# #########################################################
#
# # https://programminghistorian.org/es/lecciones/analisis-de-sentimientos-r
#
#
# # se crea variable donde recoger los tokens de cada comentario
# HistoricoAsignatura$comentarios_media = NA
# HistoricoAsignatura$comentarios_valor = NA
# HistoricoAsignatura$comentarios_n_terminos = NA
# HistoricoAsignatura$comentarios_valor_normalizado = NA
#
# # se crea df vacío por si al eliminar stopwords el vector está vacío
# df_vacio = data.frame(anger = NA,
# anticipation = NA,
# disgust = NA,
# fear = NA,
# joy = NA,
# sadness = NA,
# surprise = NA,
# trust = NA,
# negative = NA,
# positive = NA)
#
# library(syuzhet)
# library(tm)
#
# # mediante bucle se recorre el histórico de resultados y si tiene comentarios se obtiene una valoración numérica del contenido del mismo
# for (i in 1:nrow(HistoricoAsignatura)) {
#
# # si tiene comentario, obtener tokens y cuantificar
# if(!is.na(HistoricoAsignatura$asig_aaff_comentarios[i]) == TRUE){
#
# # se eliminan las stopwords del comentario
# texto_palabras = removeWords(HistoricoAsignatura$asig_aaff_comentarios[i], stopwords("spanish"))
#
# # se divide la cadena de caracteres en un listado de palabras o unigramas (tokens)
# texto_palabras = get_tokens(texto_palabras)
#
# # se extraen datos con el Léxico de Sentimientos NRC
# sentimientos_df = if(length(texto_palabras)>0){
# get_nrc_sentiment(texto_palabras, lang="spanish")
# }
#
# } else {
# sentimientos_df = df_vacio
# }
#
#
#
# # https://bookdown.org/dparedesi/data-science-con-r/procesamiento-de-cadenas-y-miner%C3%ADa-de-texto.html#miner%C3%ADa-de-texto-mapa-de-palabras
#
#
# # se obtiene valor numérico asociado al comentario
# HistoricoAsignatura$comentarios_media[i] = (-1*sum(sentimientos_df$negative) + sum(sentimientos_df$positive)) / sum(sentimientos_df$negative, sentimientos_df$positive)
# HistoricoAsignatura$comentarios_positivos[i] = sum(sentimientos_df$positive)
# HistoricoAsignatura$comentarios_negativos[i] = sum(sentimientos_df$negative) *-1
# HistoricoAsignatura$comentarios_valor[i] = sum((sentimientos_df$negative *-1) + sentimientos_df$positive)
# HistoricoAsignatura$comentarios_n_terminos[i] = sum((sentimientos_df$negative) + sentimientos_df$positive)
#
# # se define variable sobre la que dividir, como se busca rango -1/1
# denominador = ifelse(!is.null(nrow(sentimientos_df)),
# ifelse(nrow(sentimientos_df)>HistoricoAsignatura$comentarios_n_terminos[i],
# nrow(sentimientos_df),
# HistoricoAsignatura$comentarios_n_terminos[i]),
# 0)
#
# HistoricoAsignatura$comentarios_valor_normalizado[i] = ifelse(denominador > 0,
# HistoricoAsignatura$comentarios_valor[i]/denominador,
# NA)
#
# } # bucle
# ####################################################################################################################
# ############################## Guardado del histórico #########################
# ####################################################################################################################
#
# # Guardamos el data frame generado en un fichero junto con los excel para por si
# # necesitamos durante el desarrollo cargar HistoricoAsignatura pero no es necesario volver
# # a calcular el data frame. Con un load(paste0(vPathAsignatura, "HistoricoAsignatura.Rda"))
# # bastará para tener el data frame disponible.
#
# if (file.exists(paste0(vPathAsignatura, "HistoricoAsignatura.Rda"))) {
# save(HistoricoAsignatura, file = paste0(vPathAsignatura, "HistoricoAsignatura.Rda"))}
#
# if (!file.exists(paste0(vPathAsignatura, "HistoricoAsignatura.Rda"))) {
# save(HistoricoAsignatura, file = paste0(vPathAsignatura, "HistoricoAsignatura.Rda"))}
#
# print("Fin 01_LeerFicherosHistoricoAsignatura.R")
La tarea de acceso se simplifica una vez se han construido estos históricos. Una vez que finalice un estudio (de períodos posteriores al actual), únicamente se debe:
Actualizar el contenido del script .R anterior para cargar los ficheros de población y muestra del nuevo periodo.
Ejecutarlo para que se actualice la bbdd .Rda con los nuevos resultados.
Cargar los datos en el fichero .R o .Rmd en el que se vaya a utilizar mediante la definición de la ruta en la que se encuentra (vPath_) y la carga de la bbdd. Esto se realiza mediante el código:
# ruta donde se encuentra el histórico de resultados
vPath_Asignaturas = "/media/pluto/departamentos/calidad/1_UDIMA/Medición y Análisis/Histórico de resultados/SA-E: Satisfacción semestral de estudiantes/Resultados/"
# se cargan los datos
load(paste0(vPath_Asignaturas, "HistoricoAsignatura.Rda"))
Para cada uno de los juegos de datos se definen:
la fuente de datos,
los criterios de extracción y las transformaciones necesarias para su obtención,
los niveles de agrupación,
y las variables que la componen.
Para la obtención de esta base de datos ha sido necesario utilizar y aplicar:
Fuente de datos: programa de gestión académica de la universidad (Universitas XXI o UXXI). Se extraen datos mediante consulta con el software SqlDeveloper a la tabla vaca_rendimientosiiu_udima, y en RStudio se calculan variables a partir de las obtenidas.
Criterios de extracción y transformaciones necesarias para su obtención:
Se excluyen titulaciones del centro adscrito asociado a la universidad;
Se excluyen titulaciones de doble grado;
Se excluyen datos de matriculación asociados al presente curso 2022-23 que aún no han generado resultados.
Niveles de agrupación: la tabla recoge el rendimiento anual de cada estudiante, por tanto, se deben agrupar los datos realizando sumatorios de los ECTS obtenidos para obtener un único registro con los valores globales de cada estudiante, plan y conjunto de cursos donde ha estado matriculado. En el caso de que el estudiante haya realizado una adaptación de un plan en extinción a un plan nuevo, se realizarán los cálculos oportunos para que el rendimiento generado en la titulación a extinguir sea tenida en cuenta en la titulación adaptada o nueva.
Variables que la componen:
| Variable | Descripción | Valores | Tipo | Explotación |
|---|---|---|---|---|
| ste_codalf | Tipo de estudios | 0: Grado, 1: Máster | Cardinal | Sí |
| est_codmec | Código MEC plan | 7 caracteres numéricos | Categórica | Sí |
| cen_codnum | Código MEC centro | 5 caracteres numéricos | Categórica | Sí |
| pla_codalf | Código plan | 3 caracteres numéricos | Categórica | No, identificativo |
| exp_numord | Número de expediente | Numérico | Categórica | No, identificativo |
| sexo | Sexo | 1: Mujer, 0: Hombre | Cardinal | Sí |
| edad_inicio | Edad inicio estudios | >0 | Cardinal | Sí |
| id_usuldap | Usuario del campus | alfanumérico | Categórica | No, identificativo |
| nacionalidad | 1ª Nacionalidad | 1: española, 0: no | Cardinal | Sí |
| numdocsinletra | Nº documento | alfanumérico | Categórica | No, identificativo |
| any_anyaca_acceso | Curso de vía acceso | < 2022-23 | Categórica | Sí |
| any_anyaca_inicio | Curso inicio estudios | < 2022-23 | Categórica | Sí |
| titulado | Titulación finalizada | >=0 | Cardinal | Sí |
| tasa_eficiencia | 100*ECTS superados/matriculados | >=0 | Cardinal | Sí |
| t_exito | 100*ECTS superados/presentados | >=0 | Cardinal | Sí |
| t_evaluacion | 100*ECTS presentados/matriculados | >=0 | Cardinal | Sí |
| t_rec | 100*ECTS reconocidos/total a superar | >=0 | Cardinal | Sí |
| t_sup_req | 100*ECTS (superados+reconocidos)/total a superar | >=0 | Cardinal | Sí |
| acceso | Tipo acceso presentado | 1: Titulado Universitario, 0: No | Cardinal | Sí |
| complementos | Requiere complementos | 1: Sí, 0: No | Cardinal | Sí |
| traslado_expediente | Traslado de expediente | 1: Sí, 0: No | Cardinal | Sí |
| n_nodos_fin_titulacion | Nº de nodos de finalización (si >1, distintas especialidades) | >=0 | Cardinal | Sí |
| duracion_media_estudios | Número de cursos donde formaliza matrícula. | >=0 | Cardinal | Sí |
| tasa_abandono | 0: si se titula, no se traslada y tiene matrícula activa en dos últimos cursos; 1: en el resto de casos | 1: Sí, 0: No | Cardinal | Sí |
| nota_media | Media ponderada ECTS superados en Udima | >=0 | Cardinal | Sí |
Notas: t_rec y t_sup_req pueden superar el 100% ya que están calculadas frentes a los ECTS requeridos para finalizar la titulación, pero pueden superarse más ECTS de los requeridos (optativas, menciones, especialidades).
# ruta donde se encuentra el histórico de resultados
vPath_datos = "/media/pluto/departamentos/calidad/1_UDIMA/Medición y Análisis/Estudio segmentación de estudiantes/datos/"
# se cargan los datos
bbdd_rto = read_delim(paste0(vPath_datos,"vaca_rendimientosiiu_udima.csv"),
delim = ";",
escape_double = FALSE,
trim_ws = TRUE)
# nombre de variables a minúscula
names(bbdd_rto) = str_to_lower(names(bbdd_rto))
# se corrigen datos erróneos de curso de inicio de estudios (consultado en CRM)
bbdd_rto$any_anyacaobe[bbdd_rto$any_anyacaobe == "1994-95"] = "2011-12"
bbdd_rto$any_anyacaobe[bbdd_rto$any_anyacaobe == "2003-04"] = "2010-11"
# se define el tipo de datos
bbdd_rto$pla_codalf = as.numeric(bbdd_rto$pla_codalf)
bbdd_rto$exp_numord = as.numeric(bbdd_rto$exp_numord)
# ste codalf a dicotomia 1 Máster, 0 Grado
bbdd_rto$ste_codalf = ifelse(bbdd_rto$ste_codalf == "GRA", 0, 1)
# se cargan los datos
adaptaciones = read_delim(paste0(vPath_datos,"rendimientosiuu_agregado.csv"),
delim = ";",
escape_double = FALSE,
trim_ws = TRUE)
# nombre de variables a minúscula
names(adaptaciones) = str_to_lower(names(adaptaciones))
##### Rto en plan de destino #######
# los planes origen de una adaptación deben:
# 1 - obtener su rto para sumarse al plan destino
# 2 - eliminarse de bbdd_rto, porque su rto se sumará al plan destino
# se obtienen adaptaciones
adaptaciones_origen = adaptaciones %>%
# plan origen no vacío
filter(!is.na(pla_codalf_adapdes)) %>%
select(pla_codalf, exp_numord)
adaptaciones_origen$pla_codalf = as.numeric(adaptaciones_origen$pla_codalf)
adaptaciones_origen$exp_numord = as.numeric(adaptaciones_origen$exp_numord)
# 1 - obtener su rto para sumarse al plan destino
adaptaciones_origen_rto = list(adaptaciones_origen, bbdd_rto) %>% reduce(left_join)
# 2 - eliminarse de bbdd_rto, porque su rto se sumará al plan destino
bbdd_rto = bbdd_rto %>% anti_join(adaptaciones_origen)
##### Rto en plan de destino #######
# los planes destino de una adaptación deben:
# 1 - sumar el rto del plan origen
# 2 - sustituir sus valores iniciales en bbdd_rto
# 3 - incorporar los valores calculados a bbdd_rto
# se obtienen adaptaciones
adaptaciones_destino = adaptaciones %>%
# plan origen no vacío
filter(!is.na(pla_codalf_adapori)) %>%
select(pla_codalf, exp_numord, pla_codalf_adapori, exp_numord_adapori, numdocsinletra)
adaptaciones_destino$pla_codalf = as.numeric(adaptaciones_destino$pla_codalf)
adaptaciones_destino$exp_numord = as.numeric(adaptaciones_destino$exp_numord)
# su rto se recupera de bbdd_rto
adaptaciones_destino_rto = list(adaptaciones_destino, bbdd_rto) %>% reduce(left_join)
# 1 - sumar el rto del plan origen
# 1.1 - renombrar columnas para saber qué rendimientos son
# vector a renombrar
v_renombrar = c("creditosmat", "creditoscfmat", "creditos_sup",
"creditos_pre", "creditoscf_sup", "creditoscf_pre",
"creditosrec", "creditosrecsup", "creditoscfrec",
"creditoscfrecsup")
# 1.2 mediante bucle se renombran las variables de origen para saber que lo son
for (i in 1:length(names(adaptaciones_origen_rto))) {
# si la variable está en el vector a renombrar
if(names(adaptaciones_origen_rto)[i] %in% v_renombrar) {
# se renombra
names(adaptaciones_origen_rto)[i] = paste0(names(adaptaciones_origen_rto)[i],
"_origen")
}
}
# 1.3 mediante bucle se renombran las variables de destino para saber que lo son
for (i in 1:length(names(adaptaciones_destino_rto))) {
# si la variable está en el vector a renombrar
if(names(adaptaciones_destino_rto)[i] %in% v_renombrar) {
# se renombra
names(adaptaciones_destino_rto)[i] = paste0(names(adaptaciones_destino_rto)[i],
"_destino")
}
}
# 1.4 - se eliminan variables que no son necesarias en origen (para la fusión)
adaptaciones_origen_rto$ste_codalf = NULL
adaptaciones_origen_rto$est_codmec = NULL
adaptaciones_origen_rto$cen_codnum = NULL
adaptaciones_origen_rto$email = NULL
adaptaciones_origen_rto$sexo = NULL
adaptaciones_origen_rto$id_usuldap = NULL
adaptaciones_origen_rto$pai_na1desid = NULL
adaptaciones_origen_rto$pai_na2desid = NULL
adaptaciones_origen_rto$numerodocumento = NULL
adaptaciones_origen_rto$edad_fin = NULL
adaptaciones_origen_rto$any_anyaca_fin = NULL
adaptaciones_origen_rto$titulado = NULL
adaptaciones_origen_rto$credreq = NULL
adaptaciones_origen_rto$edad_actual = NULL
adaptaciones_origen_rto$tasa_eficiencia = NULL
# 1.5 - se eliminan variables que no son necesarias en destino (para la fusión)
adaptaciones_destino_rto$edad_inicio = NULL
adaptaciones_destino_rto$any_anyaca_inicio = NULL
adaptaciones_destino_rto$tasa_eficiencia = NULL
adaptaciones_destino_rto$pla_codalf_dest = adaptaciones_destino_rto$pla_codalf
adaptaciones_destino_rto$pla_codalf = NULL
adaptaciones_destino_rto$exp_numord_dest = adaptaciones_destino_rto$exp_numord
adaptaciones_destino_rto$exp_numord= NULL
adaptaciones_destino_rto$pla_codalf = adaptaciones_destino_rto$pla_codalf_adapori
adaptaciones_destino_rto$exp_numord = adaptaciones_destino_rto$exp_numord_adapori
# 1.6 se fusionan
adaptaciones_rto = list(adaptaciones_destino_rto,
adaptaciones_origen_rto) %>% reduce(left_join)
# se renombran variables
adaptaciones_rto$pla_codalf_adapori = NULL
adaptaciones_rto$exp_numord_adapori = NULL
adaptaciones_rto$pla_codalf = NULL
adaptaciones_rto$exp_numord = NULL
adaptaciones_rto$pla_codalf = adaptaciones_rto$pla_codalf_dest
adaptaciones_rto$exp_numord = adaptaciones_rto$exp_numord_dest
adaptaciones_rto$pla_codalf_dest = NULL
adaptaciones_rto$exp_numord_dest = NULL
# 1.7 se suman los ects para tenerlos en plan destino
rto_adaptaciones = adaptaciones_rto %>%
group_by(# identificativos
est_codmec = est_codmec,
pla_codalf = pla_codalf,
exp_numord = exp_numord,
id_usuldap,
numdocsinletra = numdocsinletra,
# a explotar
ste_codalf,
cen_codnum = as.factor(cen_codnum),
sexo = mujer,
nacionalidad = ifelse(pai_na1desid == "ESPAÑA", 1, 0), # nacionalidad a dicotómica (1 = Española)
any_anyaca_acceso,
any_anyaca_inicio = any_anyacaobe #inicio_estudios
) %>%
summarise(titulado = sum(tituladocursoref),
# ECTS superados/matriculados
tasa_eficiencia = ifelse(sum(creditosmat_destino, creditosmat_origen,
creditoscfmat_destino, creditoscfmat_origen) > 0,
round(100*sum(creditos_sup_destino, creditos_sup_origen, creditoscf_sup_destino,
creditoscf_sup_origen)/sum(creditosmat_destino,
creditosmat_origen,
creditoscfmat_destino, creditoscfmat_origen), 2),
0),
# ECTS superados/presentados
t_exito = ifelse(sum(creditos_sup_destino, creditos_sup_origen,
creditoscf_sup_destino, creditoscf_sup_origen) > 0,
round(100*sum(creditos_sup_destino, creditos_sup_origen, creditoscf_sup_destino,
creditoscf_sup_origen)/sum(creditos_pre_destino, creditos_pre_origen,
creditoscf_pre_destino, creditoscf_pre_origen), 2),
0),
# ECTS presentados/matriculados
t_evaluacion = ifelse(sum(creditosmat_destino, creditosmat_origen, creditoscfmat_destino,
creditoscfmat_origen) > 0,
round(100*sum(creditos_pre_destino, creditos_pre_origen, creditoscf_pre_destino,
creditoscf_pre_origen)/sum(creditosmat_destino, creditosmat_origen,
creditoscfmat_destino, creditoscfmat_origen), 2),
0),
# ECTS reconocidos/total a superar
t_rec = ifelse(sum(creditosrec_destino, creditosrec_origen) > 0,
round(100*sum(creditosrec_destino, creditosrec_origen)/max(credreq), 2),
0),
# ECTS (superados+reconocidos)/total a superar
t_sup_req = ifelse(sum(creditosrec_destino, creditosrec_origen, creditos_sup_destino,
creditos_sup_origen, creditoscf_sup_destino, creditoscf_sup_origen) > 0,
round(100*sum(creditosrec_destino, creditosrec_origen, creditos_sup_destino,
creditos_sup_origen, creditoscf_sup_destino,
creditoscf_sup_origen)/max(credreq), 2),
0),
edad_inicio = edad - (22 - as.numeric(substr(any_anyaca_inicio, start = 2, stop = 4))))
# # 2 - sustituir sus valores iniciales en rto_total
# rto_total = rto_total %>% anti_join(adaptaciones_destino)
#
# # 3 - incorporar los valores calculados a rto_total
# # names(rto_total)[!names(rto_total) %in% names(rto_adaptaciones)]
# rto_total = rbind(rto_total,
# rto_adaptaciones)
# calculos rto y aplicación de adaptaciones realizadas
# se obtienen los datos
rto_total = bbdd_rto %>%
filter(est_codmec >4, # se descartan las matrículas de erasmus
cen_codnum != 11421, # se descarta el centro adscrito
any_anyacaobe < "2022-23", # se descarta curso actual de matrícula
any_anyaca < "2022-23", # se descarta curso actual de finalización
!(between(pla_codalf, as.numeric("180"), as.numeric("500"))) # no dobles grados
) %>%
group_by(# identificativos
est_codmec = est_codmec,
pla_codalf = pla_codalf,
exp_numord = exp_numord,
id_usuldap,
numdocsinletra = numdocsinletra,
# a explotar
ste_codalf,
cen_codnum = as.factor(cen_codnum),
sexo = mujer,
nacionalidad = ifelse(pai_na1desid == "ESPAÑA", 1, 0),
any_anyaca_acceso,
any_anyaca_inicio = any_anyacaobe #inicio_estudios
) %>%
summarise(titulado = sum(tituladocursoref),
# ECTS superados/matriculados
tasa_eficiencia = ifelse(sum(creditosmat, creditoscfmat) > 0,
round(100*sum(creditos_sup, creditoscf_sup)/sum(creditosmat, creditoscfmat), 2),
NA),
# ECTS superados/presentados
t_exito = ifelse(sum(creditos_sup, creditoscf_sup) > 0,
round(100*sum(creditos_sup, creditoscf_sup)/sum(creditos_pre, creditoscf_pre), 2),
NA),
# ECTS presentados/matriculados
t_evaluacion = ifelse(sum(creditosmat, creditoscfmat) > 0,
round(100*sum(creditos_pre, creditoscf_pre)/sum(creditosmat, creditoscfmat), 2),
NA),
# ECTS reconocidos/total a superar
t_rec = ifelse(sum(creditosrec) > 0,
round(100*sum(creditosrec)/max(credreq), 2),
NA),
# ECTS (superados+reconocidos)/total a superar
t_sup_req = ifelse(sum(creditosrec, creditos_sup, creditoscf_sup) > 0,
round(100*sum(creditosrec, creditos_sup, creditoscf_sup)/max(credreq), 2),
NA),
edad_inicio = edad - (22 - as.numeric(substr(any_anyaca_inicio, start = 2, stop = 4))))
# valores únicos
rto_total = unique(rto_total)
# se continuan los pasos de las adaptaciones destino del chun anterior
# 2 - sustituir sus valores iniciales en rto_total
rto_total = rto_total %>% anti_join(adaptaciones_destino)
# 3 - incorporar los valores calculados a rto_total
# names(rto_total)[!names(rto_total) %in% names(rto_adaptaciones)]
rto_total = rbind(rto_total,
rto_adaptaciones)
# ruta donde se encuentra el histórico de resultados
vPath_accesos = "/media/pluto/departamentos/calidad/1_UDIMA/Medición y Análisis/Estudio segmentación de estudiantes/datos/accesos/"
# se cargan los datos
accesos = read_excel(paste0(vPath_accesos, "accesos.xlsx"),
sheet = "Exportar Hoja de Trabajo")
# nombre de variables a minúscula
names(accesos) = str_to_lower(names(accesos))
# valores unicos
accesos = unique(accesos)
# se transforman datos para poder fusionar
accesos$pla_codalf = as.numeric(accesos$pla_codalf)
# se convierte a dicotómica
accesos$acceso = ifelse(accesos$acceso == 'Titulado Universitario', 1, 0)
accesos$complementos = ifelse(accesos$complementos == "Sí", 1, 0)
accesos$subacceso = NULL
# hay accesos duplicados, uno con complementos y otro sin, se simplifica
accesos_dobles = accesos %>%
group_by(pla_codalf, exp_numord, acceso) %>%
count() %>%
filter(n == 2)
accesos_dobles$n = NULL
accesos_dobles$complementos = 1
# se eliminan de accesos
accesos = accesos %>% anti_join(accesos_dobles)
# se añaden simplificados
accesos = rbind(accesos,
accesos_dobles)
# se incluyen los datos de acceso a los de rto_total
rto_total = list(rto_total, accesos) %>% reduce(left_join)
# se cargan los datos
abandono = read_delim(paste0(vPath_datos,"tasa_abandono.csv"),
delim = ";",
escape_double = FALSE,
trim_ws = TRUE)
# nombre de variables a minúscula
names(abandono) = str_to_lower(names(abandono))
# se obtienen datos a fusionar
tasa_abandono = abandono %>%
group_by(pla_codalf = as.numeric(pla_codalf),
exp_numord,
tasa_abandono = abandono,
traslado_expediente = ifelse(is.na(ttr_codalf), 0, 1), # dicotómica
n_nodos_fin_titulacion = sum_nodos_total) %>%
summarise(duracion_media_estudios = max(num_anios_matriculado_total))
# se incluyen los datos de abandono a los de rto_total
rto_total = list(rto_total, tasa_abandono) %>% reduce(left_join)
# se cargan los datos
notas = read_excel(paste0(vPath_datos,"nota_media_expediente.xlsx"))
# nombre de variables a minúscula
names(notas) = str_to_lower(names(notas))
# se obtienen datos a fusionar
nota_egreso = notas %>%
group_by(pla_codalf = as.numeric(pla_codalf),
exp_numord) %>%
select(nota_media = mediaudima)
# se incluyen los datos de acceso a los de rto_total
rto_total = list(rto_total, nota_egreso) %>% reduce(left_join)
Para la obtención de esta base de datos ha sido necesario utilizar y aplicar:
Fuente de datos: histórico de resultados de satisfacción del estudiantado con las asignaturas construido mediante RStudio para la gestión y almacenado de datos no disponibles en bases datos (satisfacción). Ver apartado Recopilación de datos.
Criterios de extracción y transformaciones necesarias para su obtención:
Se excluyen titulaciones del centro adscrito asociado a la universidad;
Se excluyen titulaciones de doble grado.
Niveles de agrupación: la base de datos recoge la satisfacción semestral de cada estudiante en cada plan, asignatura y docente en el que está matriculado, por tanto, se agrupan los datos realizando promedios de la obtención manifestada para obtener un único registro por estudiante. En el caso de que el estudiante haya realizado una adaptación de un plan en extinción a un plan nuevo, se realizarán los cálculos oportunos para que la satisfacción manifestada en la titulación a extinguir sea tenida en cuenta en la titulación adaptada o nueva.
Variables que la componen:
| Variable | Descripción | Valores | Tipo | Explotación |
|---|---|---|---|---|
| pla_codalf | Código plan | 3 caracteres numéricos | Categórica | No, identificativo |
| exp_numord | Número de expediente | Numérico | Categórica | No, identificativo |
| sa_asig_R | Representatividad de la muestra | 1: “Sí”, 0: “No” | Cardinal | Sí |
| sa_asig_participacion | Proporción de encuestas respondidas por el estudiante en las asignaturas del plan respecto de las que han sido enviadas | entre 0 y 1 | Cardinal | Sí |
| sa_asig_organizacion | Promedio de valoraciones aportadas por el estudiante en las asignaturas para el ítem La organización de la asignatura facilita el aprendizaje de esta asignatura. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_asig_manual | Promedio de valoraciones aportadas por el estudiante en las asignaturas para el ítem El manual facilita el aprendizaje de esta asignatura | >=1 y <= 5 | Cardinal | Sí |
| sa_asig_materiales | Promedio de valoraciones aportadas por el estudiante en las asignaturas para el ítem Otros materiales didácticos aportados facilitan el aprendizaje de esta asignatura | >=1 y <= 5 | Cardinal | Sí |
| sa_asig_actividades | Promedio de valoraciones aportadas por el estudiante en las asignaturas para el ítem Las actividades didácticas planteadas facilitan el aprendizaje de esta asignatura | >=1 y <= 5 | Cardinal | Sí |
| sa_asig_docente | Promedio de valoraciones aportadas por el estudiante en las asignaturas para el ítem La labor del docente facilita el aprendizaje de esta asignatura | >=1 y <= 5 | Cardinal | Sí |
| sa_asig_aprendiendo | Porcentaje de respuestas Sí al ítem ¿Consideras que estás aprendiendo? respecto de las encuestas respondidas por el estudiante en las asignaturas | entre 0 y 1 | Cardinal | Sí |
| sa_asig_comentarios | Promedio de la connotación del contenido de los comentarios realizados por el estudiante en las encuestas de las asignaturas | entre -1 y 1 | Cardinal | Sí |
Representatividad de la muestra (determina si la muestra es estadísticamente significativa): Dado que las respuestas recibidas responden a un muestreo se determina la obtención de muestra representativa mediante la fórmula:
\[Muestra\ representativa\ (n)\ = \frac{\frac{z^{2}\ p\ (1-p)\ }{e^{2}}}{1 + \frac{z^{2}\ p\ (1-p)\ }{e^{2} N\ }}\]
Siendo:
Nivel de confianza (NC) del 80%, lo que implica Z-score (z) de 1.282.
Proporción esperada (p): para maximizar el tamaño muestral será de 0.5 (50%).
Error muestral (e) del 10%.
Población (N): cantidad total de usuarios a los que se invita a participar en el estudio.
# ruta donde se encuentra el histórico de resultados
vPath_Asignaturas = "/media/pluto/departamentos/calidad/1_UDIMA/Medición y Análisis/Histórico de resultados/SA-E: Satisfacción semestral de estudiantes/Resultados/"
# se cargan los datos
load(paste0(vPath_Asignaturas, "HistoricoAsignatura.Rda"))
# se duplica el histórico para incluir los planes adaptados
HistoricoAsignatura_adaptado = HistoricoAsignatura
# se transforman las opiniones de planes adaptados
adaptaciones_origen_destino = adaptaciones_destino %>%
select(plan = pla_codalf_adapori,
documento = numdocsinletra,
expediente = exp_numord_adapori,
pla_codalf_destino = pla_codalf,
exp_numord_destino = exp_numord
)
# se convierten a numérico para evitar que traiga el valor del orden del factor
adaptaciones_origen_destino$plan = as.numeric(adaptaciones_origen_destino$plan)
adaptaciones_origen_destino$expediente = as.numeric(adaptaciones_origen_destino$expediente)
adaptaciones_origen_destino$pla_codalf_destino = as.character(adaptaciones_origen_destino$pla_codalf_destino)
adaptaciones_origen_destino$exp_numord_destino = as.character(adaptaciones_origen_destino$exp_numord_destino)
# se unen
HistoricoAsignatura_adaptado = list(HistoricoAsignatura_adaptado, adaptaciones_origen_destino) %>% reduce(left_join)
# se realizan los cambios de plan y expediente de las adaptaciones
for (i in 1:nrow(HistoricoAsignatura_adaptado)) {
# si el plan se ha adaptado, se modifica
HistoricoAsignatura_adaptado$plan[i] = if(is.na(HistoricoAsignatura_adaptado$pla_codalf_destino[i])){
HistoricoAsignatura_adaptado$plan[i]
} else {
HistoricoAsignatura_adaptado$pla_codalf_destino[i]
}
# igual con expedientes
HistoricoAsignatura_adaptado$expediente[i] = if(is.na(HistoricoAsignatura_adaptado$exp_numord_destino[i])){
HistoricoAsignatura_adaptado$expediente[i]
} else {
HistoricoAsignatura_adaptado$exp_numord_destino[i]
}
} # fin bucle
# se obtienen los datos
satisfaccion_estudiante_asignatura = HistoricoAsignatura_adaptado %>%
group_by(pla_codalf = as.numeric(plan),
exp_numord = as.numeric(expediente)
) %>%
summarise(sa_asig_N = n(),
sa_asig_n = sum(usesleft!='1'),
sa_asig_R = if(sa_asig_n>=(1.282**2*0.5**2/(0.1**2))/(1+(1.282**2*0.5**2/(0.1**2*sa_asig_N)))) {1} else {0},
sa_asig_participacion = round(100*sa_asig_n/sa_asig_N, 2),
sa_asig_organizacion = round(mean(asig_organizacion, na.rm = TRUE), 2),
sa_asig_manual = round(mean(asig_manual, na.rm = TRUE), 2),
sa_asig_materiales = round(mean(asig_materiales, na.rm = TRUE), 2),
sa_asig_actividades = round(mean(asig_aaff_actividades, na.rm = TRUE), 2),
sa_asig_docente = round(mean(asig_aaff_profe, na.rm = TRUE), 2),
sa_asig_aprendiendo = if(sum(`asig_aprendiendo`=="Sí", na.rm = TRUE)>0 && any_anyaca >= "2017-18") {
round(100*(sum(`asig_aprendiendo`=="Sí", na.rm = TRUE))
/sum(usesleft!='1'), 2)
} else {
NA
},
sa_asig_comentarios = round(mean(comentarios_valor_normalizado, na.rm = TRUE), 2)) %>%
arrange(pla_codalf, as.numeric(exp_numord))
# se corrigen valores
satisfaccion_estudiante_asignatura$sa_asig_aprendiendo = ifelse(satisfaccion_estudiante_asignatura$sa_asig_aprendiendo > 100,
100,
satisfaccion_estudiante_asignatura$sa_asig_aprendiendo)
# se eliminan los registros sin expediente
satisfaccion_estudiante_asignatura_exp = satisfaccion_estudiante_asignatura %>%
filter(!is.na(exp_numord))
# se incluyen los datos de satisfaccion_estudiante_asignatura a los de rto_total
rto_total = list(rto_total, satisfaccion_estudiante_asignatura_exp) %>% reduce(left_join)
# se eliminan las variables de muestra
rto_total$sa_asig_N = NULL
rto_total$sa_asig_n = NULL
Para la obtención de esta base de datos ha sido necesario utilizar y aplicar:
Fuente de datos: histórico de resultados de satisfacción del estudiantado con el curso construido mediante RStudio para la gestión y almacenado de datos no disponibles en bases datos (satisfacción). Ver apartado Recopilación de datos.
Criterios de extracción y transformaciones necesarias para su obtención:
Se excluyen titulaciones del centro adscrito asociado a la universidad;
Se excluyen titulaciones de doble grado.
Niveles de agrupación: la base de datos recoge la satisfacción anual de cada estudiante para cada plan y curso en que está matriculado (este estudio se inicia en 2017-18), por tanto, se agrupan los datos realizando promedios de la obtención manifestada para obtener un único registro por estudiante. En el caso de que el estudiante haya realizado una adaptación de un plan en extinción a un plan nuevo, se realizarán los cálculos oportunos para que la satisfacción manifestada en la titulación a extinguir sea tenida en cuenta en la titulación adaptada o nueva.
Variables que la componen:
| Variable | Descripción | Valores | Tipo | Explotación |
|---|---|---|---|---|
| pla_codalf | Código plan | 3 caracteres numéricos | Categórica | No, identificativo |
| exp_numord | Número de expediente | Numérico | Categórica | No, identificativo |
| sa_curso_R | Representatividad de la muestra | 1: “Sí”, 0: “No” | Cardinal | Sí |
| sa_curso_participacion | Proporción de encuestas respondidas por el estudiante en los cursos matriculados en el plan respecto de las que han sido enviadas | entre 0 y 1 | Cardinal | Sí |
| sa_curso_nivel_academico | Promedio de valoraciones aportadas por el estudiante en los cursos matriculados en el plan para el ítem ‘Mi nivel académico y de conocimientos a la hora de afrontar los estudios’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_curso_implicacion | Promedio de valoraciones aportadas por el estudiante en los cursos matriculados en el plan para el ítem ‘Mi implicación con los estudios’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_curso_aprovechamiento_recursos | Promedio de valoraciones aportadas por el estudiante en los cursos matriculados en el plan para el ítem ‘Mi aprovechamiento de los recursos didácticos disponibles’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_curso_titulacion | Promedio de valoraciones aportadas por el estudiante en los cursos matriculados en el plan para el ítem ‘Grado de satisfacción general con la titulación’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_curso_recomendacion | Proporción de respuestas Sí al ítem ¿Recomendarías estudiar en la Udima a otra persona? respecto de las encuestas respondidas por el estudiante en los cursos matriculados en el plan | entre 0 y 1 | Cardinal | Sí |
| sa_curso_comentarios | Promedio de la connotación del contenido de los comentarios realizados por el estudiante en las encuestas de curso | entre -1 y 1 | Cardinal | Sí |
Representatividad de la muestra (determina si la muestra es estadísticamente significativa): Dado que las respuestas recibidas responden a un muestreo se determina la obtención de muestra representativa mediante la fórmula:
\[Muestra\ representativa\ (n)\ = \frac{\frac{z^{2}\ p\ (1-p)\ }{e^{2}}}{1 + \frac{z^{2}\ p\ (1-p)\ }{e^{2} N\ }}\]
Siendo:
Nivel de confianza (NC) del 80%, lo que implica Z-score (z) de 1.282.
Proporción esperada (p): para maximizar el tamaño muestral será de 0.5 (50%).
Error muestral (e) del 10%.
Población (N): cantidad total de usuarios a los que se invita a participar en el estudio.
# ruta donde se encuentra el histórico de resultados
vPath_curso = "/media/pluto/departamentos/calidad/1_UDIMA/Medición y Análisis/Histórico de resultados/SA-E-CA: Satisfacción anual de estudiantes con el curso/Resultados/"
# se cargan los datos
load(paste0(vPath_curso, "Historico_SA_E_CA.Rda"))
# se duplica el histórico para incluir los planes adaptados
Historico_SA_E_CA_adaptado = Historico_SA_E_CA
# se unen
Historico_SA_E_CA_adaptado = list(Historico_SA_E_CA_adaptado, adaptaciones_origen_destino) %>% reduce(left_join)
# se realizan los cambios de plan y expediente de las adaptaciones
for (i in 1:nrow(Historico_SA_E_CA_adaptado)) {
# si el plan se ha adaptado, se modifica
Historico_SA_E_CA_adaptado$plan[i] = if(is.na(Historico_SA_E_CA_adaptado$pla_codalf_destino[i])){
Historico_SA_E_CA_adaptado$plan[i]
} else {
Historico_SA_E_CA_adaptado$pla_codalf_destino[i]
}
# igual con expedientes
Historico_SA_E_CA_adaptado$expediente[i] = if(is.na(Historico_SA_E_CA_adaptado$exp_numord_destino[i])){
Historico_SA_E_CA_adaptado$expediente[i]
} else {
Historico_SA_E_CA_adaptado$exp_numord_destino[i]
}
} # fin bucle
# se obtienen los datos
satisfaccion_estudiante_curso = Historico_SA_E_CA_adaptado %>% # no títulos propios
group_by(pla_codalf = as.numeric(plan),
exp_numord = as.numeric(expediente)
) %>%
summarise(sa_curso_N = n(),
sa_curso_n = sum(usesleft!='1'),
sa_curso_R = if(sa_curso_n>=(1.282**2*0.5**2/(0.1**2))/(1+(1.282**2*0.5**2/(0.1**2*sa_curso_N)))) {1} else {0},
sa_curso_participacion = round(100*sa_curso_n/sa_curso_N, 2),
sa_curso_nivel_academico = round(mean(cur_desemp_nivelacad, na.rm = TRUE), 2),
sa_curso_implicacion = round(mean(cur_desemp_implic, na.rm = TRUE), 2),
sa_curso_aprovechamiento_recursos = round(mean(cur_desemp_aprov, na.rm = TRUE), 2),
sa_curso_titulacion = round(mean(cur_sa_satit, na.rm = TRUE), 2),
sa_curso_recomendacion = if(sum(`cur_recom`=="Sí", na.rm = TRUE)>0) {
round(100*(sum(`cur_recom`=="Sí", na.rm = TRUE)
/sum(usesleft!='1')),
2)} else {
NA
},
sa_curso_comentarios = round(mean(comentarios_valor_normalizado, na.rm = TRUE), 2)) %>%
arrange(pla_codalf, as.numeric(exp_numord))
# se incluyen los datos de satisfaccion_estudiante_curso a los de rto_total
rto_total = list(rto_total, satisfaccion_estudiante_curso) %>% reduce(left_join)
# se eliminan las variables de muestra
rto_total$sa_curso_N = NULL
rto_total$sa_curso_n = NULL
Para la obtención de esta base de datos ha sido necesario utilizar y aplicar:
Fuente de datos: histórico de resultados de satisfacción de egresados con la titulación construido mediante RStudio para la gestión y almacenado de datos no disponibles en bases datos (satisfacción). Ver apartado Recopilación de datos.
Criterios de extracción y transformaciones necesarias para su obtención:
Se excluyen titulaciones del centro adscrito asociado a la universidad;
Niveles de agrupación: la base de datos recoge la satisfacción de cada egresado con la titulación en cada plan. En la mayoría de casos, la encuesta será única excepto que egrese varias veces en la titulación tras realizar varias especialidades/menciones (esto sucede si n_nodos_fin_titulacion > 1). Por tanto, se agrupan los datos realizando promedios de la obtención manifestada para obtener un único registro por egresado. No es necesario realizar cálculos en el caso de que se haya adaptado a un plan nuevo porque la encuesta se realiza sobre el plan en el que se egresa.
Variables que la componen:
| Variable | Descripción | Valores | Tipo | Explotación |
|---|---|---|---|---|
| pla_codalf | Código plan | 3 caracteres numéricos | Categórica | No, identificativo |
| exp_numord | Número de expediente | Numérico | Categórica | No, identificativo |
| sa_titulacion_R | Representatividad de la muestra | 1: “Sí”, 0: “No” | Cardinal | Sí |
| sa_titulacion_participacion | Proporción de encuestas respondidas por el egresado en los cursos de egreso en el plan respecto de las que han sido enviadas | entre 0 y 1 | Cardinal | Sí |
| sa_titulacion_nivel_academico | Promedio de valoraciones aportadas por el estudiante en los cursos egresados en el plan para el ítem ‘Mi nivel académico y de conocimientos a la hora de afrontar los estudios’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_titulacion_implicacion | Promedio de valoraciones aportadas por el estudiante en los cursos egresados en el plan para el ítem ‘Mi implicación con los estudios’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_titulacion_aprovechamiento_recursos | Promedio de valoraciones aportadas por el estudiante en los cursos egresados en el plan para el ítem ‘Mi aprovechamiento de los recursos didácticos disponibles’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_titulacion_mejora_profesional | Promedio de valoraciones aportadas por el estudiante en los cursos egresados en el plan para el ítem ‘La titulación obtenida ha supuesto una mejora profesional’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_titulacion_obtener_trabajo | Promedio de valoraciones aportadas por el estudiante en los cursos egresados en el plan para el ítem ‘La titulación obtenida ha supuesto obtener un puesto de trabajo’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_titulacion_titulacion | Promedio de valoraciones aportadas por el estudiante en los cursos egresados en el plan para el ítem ‘Grado de satisfacción general con la titulación’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_titulacion_recomendacion | Proporción de respuestas Sí al ítem ¿Recomendarías estudiar en la Udima a otra persona? respecto de las encuestas respondidas por el estudiante en los cursos egresados en el plan | entre 0 y 1 | Cardinal | Sí |
| sa_titulacion_comentarios | Promedio de la connotación del contenido de los comentarios realizados por el estudiante egresado en las encuestas del título | entre -1 y 1 | Cardinal | Sí |
Representatividad de la muestra (determina si la muestra es estadísticamente significativa): Dado que las respuestas recibidas responden a un muestreo se determina la obtención de muestra representativa mediante la fórmula:
\[Muestra\ representativa\ (n)\ = \frac{\frac{z^{2}\ p\ (1-p)\ }{e^{2}}}{1 + \frac{z^{2}\ p\ (1-p)\ }{e^{2} N\ }}\]
Siendo:
Nivel de confianza (NC) del 80%, lo que implica Z-score (z) de 1.282.
Proporción esperada (p): para maximizar el tamaño muestral será de 0.5 (50%).
Error muestral (e) del 10%.
Población (N): cantidad total de usuarios a los que se invita a participar en el estudio.
# ruta donde se encuentra el histórico de resultados
vPath_egresados= "/media/pluto/departamentos/calidad/1_UDIMA/Medición y Análisis/Histórico de resultados/SA-EGRE: Satisfacción anual de egresados con el título/Resultados/"
# se cargan los datos
load(paste0(vPath_egresados, "Historico_SA_EGRE.Rda"))
# se duplica el histórico para incluir los planes adaptados
Historico_SA_EGRE_adaptado = Historico_SA_EGRE
# se unen
Historico_SA_EGRE_adaptado = list(Historico_SA_EGRE_adaptado, adaptaciones_origen_destino) %>% reduce(left_join)
# se obtienen los datos
satisfaccion_egresados_titulacion = Historico_SA_EGRE_adaptado %>%
group_by(pla_codalf = as.numeric(plan),
exp_numord = as.numeric(expediente)
) %>%
summarise(sa_titulacion_N = n(),
sa_titulacion_n = sum(usesleft!='1'),
sa_titulacion_R = if(sa_titulacion_n>=(1.282**2*0.5**2/(0.1**2))/(1+(1.282**2*0.5**2/(0.1**2*sa_titulacion_N)))) {1} else {0},
sa_titulacion_participacion = round(100*sa_titulacion_n/sa_titulacion_N, 2),
sa_titulacion_nivel_academico = round(mean(des_nivel, na.rm = TRUE), 2),
sa_titulacion_implicacion = round(mean(des_implic, na.rm = TRUE), 2),
sa_titulacion_aprovechamiento_recursos = round(mean(des_recurso, na.rm = TRUE), 2),
sa_titulacion_mejora_profesional = round(mean(il_mejoraprof, na.rm = TRUE), 2),
sa_titulacion_obtener_trabajo = round(mean(il_obtenctrab, na.rm = TRUE), 2),
sa_titulacion_titulacion = round(mean(sa_tit, na.rm = TRUE), 2),
sa_titulacion_recomendacion = if(sum(`sa_recom`=="Sí", na.rm = TRUE)>0) {
round(100*(sum(`sa_recom`=="Sí", na.rm = TRUE)
/sum(usesleft!='1')),
2)} else {
NA
},
sa_titulacion_comentarios = round(mean(comentarios_valor_normalizado, na.rm = TRUE), 2)) %>%
arrange(pla_codalf, as.numeric(exp_numord))
# se incluyen los datos de satisfaccion_egresados_titulacion a los de rto_total
rto_total = list(rto_total, satisfaccion_egresados_titulacion) %>% reduce(left_join)
# se eliminan las variables de muestra
rto_total$sa_titulacion_N = NULL
rto_total$sa_titulacion_n = NULL
Para la obtención de esta base de datos ha sido necesario utilizar y aplicar:
Fuente de datos: histórico de resultados de inserción laboral de egresados con la titulación construido mediante RStudio para la gestión y almacenado de datos no disponibles en bases datos (inserción laboral). Ver apartado Recopilación de datos.
Criterios de extracción y transformaciones necesarias para su obtención:
Se excluyen titulaciones del centro adscrito asociado a la universidad;
Niveles de agrupación: la base de datos recoge la inserción laboral de cada egresado con la titulación. Este estudio se realiza en dos ocasiones por cada plan-egresado (una al curso de egresar: Tipo I y otra a los dos cursos: Tipo II). En la mayoría de casos, la encuesta será única excepto que egrese varias veces en la titulación tras realizar varias especialidades/menciones (esto sucede si n_nodos_fin_titulacion > 1). Por tanto, se agrupan los datos realizando promedios de la obtención manifestada para obtener un único registro por egresado. No es necesario realizar cálculos en el caso de que se haya adaptado a un plan nuevo porque el estudio se realiza sobre el plan en el que se egresa.
Variables que la componen:
| Variable | Descripción | Valores | Tipo | Explotación |
|---|---|---|---|---|
| pla_codalf | Código plan | 3 caracteres numéricos | Categórica | No, identificativo |
| exp_numord | Número de expediente | Numérico | Categórica | No, identificativo |
| il_R | Representatividad de la muestra | 1: “Sí”, 0: “No” | Cardinal | Sí |
| il_participacion | Proporción de encuestas respondidas por el egresado en los cursos de egreso y estudios en el plan respecto de las que han sido enviadas (estudios tipo I y II, realizados respectivamente, al año y dos años de egresar) | entre 0 y 1 | Cardinal | Sí |
| il_motivo_estudios | Valoración aportada por el egresado en los estudios tipo I y II en el plan para el ítem ¿Por qué realizaste tus estudios en UDIMA? | 1: Mejora laboral; 0: Otros | Cardinal | Sí |
| il_consecuencia_estudios | Valoración aportada por el egresado en los estudios tipo I y II en el plan para el ítem ¿Qué ha supuesto la realización de los estudios? | 1: Conseguir o mejorar un empleo; 0: No variación u Otro | Cardinal | Sí |
| il_trabajo_actual | Valoración aportada por el egresado en los estudios tipo I y II en el plan para el ítem ¿Trabajas actualmente? | 1, Sí; 0, No | Cardinal | Sí |
| il_trabajo_actual_relacionado_estudios | Valoración aportada por el egresado en los estudios tipo I y II en el plan para el ítem ¿Trabajas actualmente en alguna actividad relacionada con los estudios finalizados? | 1, Sí; 0, No | Cardinal | Sí |
| il_comentarios | Promedio de la connotación del contenido de los comentarios realizados por el estudiante egresado en el estudio de inserción laboral del título | entre -1 y 1 | Cardinal | Sí |
Representatividad de la muestra (determina si la muestra es estadísticamente significativa): Dado que las respuestas recibidas responden a un muestreo se determina la obtención de muestra representativa mediante la fórmula:
\[Muestra\ representativa\ (n)\ = \frac{\frac{z^{2}\ p\ (1-p)\ }{e^{2}}}{1 + \frac{z^{2}\ p\ (1-p)\ }{e^{2} N\ }}\]
Siendo:
Nivel de confianza (NC) del 80%, lo que implica Z-score (z) de 1.282.
Proporción esperada (p): para maximizar el tamaño muestral será de 0.5 (50%).
Error muestral (e) del 10%.
Población (N): cantidad total de usuarios a los que se invita a participar en el estudio.
# ruta donde se encuentra el histórico de resultados
vPath_insercion= "/media/pluto/departamentos/calidad/1_UDIMA/Medición y Análisis/Histórico de resultados/IL-EGRE: Inserción Laboral de Egresados/Resultados/"
# se cargan los datos
load(paste0(vPath_insercion, "HistoricoInsercionLaboral.Rda"))
# No son necesarias adaptaciones porque solo egresan en el plan destino
# Se convierten a dicotómicas
# variable il_motivo_estudios: 1 Mejora laboral
# se define vector con tipos de respuestas que serán 1
mejora = c("Para mejorar mi situación laboral.",
"Interés personal, Promoción interna",
"Para conseguir un puesto de trabajo.",
"Interés personal, Mejora empleabilidad",
"Cubrir requisitos",
"Mejora empleabilidad, Cubrir requisitos",
"Ofrecimiento empresa",
"Interés personal, Cubrir requisitos",
"Interés personal, Promoción interna, Mejora empleabilidad")
# si la opción contenida en vector 1, si no 0 y si está vacía NA
HistoricoInsercionLaboral$pe_estudios_razon = ifelse(HistoricoInsercionLaboral$pe_estudios_razon %in% mejora,
1,
ifelse(!is.na(HistoricoInsercionLaboral$pe_estudios_razon),
0, NA))
# variable il_consecuencia_estudios
consecuencia = c("Conseguir un empleo.",
"Mejorar mi posición profesional.")
HistoricoInsercionLaboral$pe_estudios_consecuencia = ifelse(HistoricoInsercionLaboral$pe_estudios_consecuencia %in% consecuencia,
1,
ifelse(!is.na(HistoricoInsercionLaboral$pe_estudios_consecuencia),
0, NA))
# variable il_trabajo_actual y trabaja_estudios (1 sí)
HistoricoInsercionLaboral$pe_trabaja = ifelse(HistoricoInsercionLaboral$pe_trabaja == 'Sí', 1,
ifelse(!is.na(HistoricoInsercionLaboral$pe_trabaja),
0, NA))
HistoricoInsercionLaboral$trabaja_estudios = ifelse(HistoricoInsercionLaboral$trabaja_estudios == 'Sí', 1,
ifelse(!is.na(HistoricoInsercionLaboral$trabaja_estudios),
0, NA))
# se obtienen los datos
insercion_laboral = HistoricoInsercionLaboral %>%
group_by(pla_codalf = as.numeric(plan),
exp_numord = as.numeric(expediente),
completed
) %>%
summarise(il_N = n(),
il_n = sum(usesleft!='1'),
il_R = if(il_n>=(1.282**2*0.5**2/(0.1**2))/(1+(1.282**2*0.5**2/(0.1**2*il_N)))) {1} else {0},
il_participacion = round(100*il_n/il_N, 2),
il_motivo_estudios = pe_estudios_razon,
il_consecuencia_estudios = pe_estudios_consecuencia,
il_trabajo_actual = pe_trabaja,
il_trabajo_actual_relacionado_estudios = trabaja_estudios,
il_comentarios = round(mean(comentarios_valor_normalizado, na.rm = TRUE), 2)) %>%
arrange(pla_codalf, as.numeric(exp_numord))
# Para duplicados, último registro más actual
insercion_laboral = insercion_laboral %>%
group_by(pla_codalf,
exp_numord) %>%
filter(completed==max(completed)) %>%
arrange(pla_codalf, exp_numord)
# valores únicos
insercion_laboral = unique(insercion_laboral)
insercion_laboral$completed = NULL
# se incluyen los datos de insercion_laboral a los de rto_total
rto_total = list(rto_total, insercion_laboral) %>% reduce(left_join)
# se eliminan las variables de muestra
rto_total$il_N = NULL
rto_total$il_n = NULL
Para la obtención de esta base de datos ha sido necesario utilizar y aplicar:
Fuente de datos: LMS (Learning Management System): Moodle. Se extraen datos mediante consulta con el software dbeaver-ce.
Criterios de extracción y transformaciones necesarias para su obtención:
Se excluyen titulaciones del centro adscrito asociado a la universidad;
Niveles de agrupación: la base de datos recoge el total de conexiones realizadas por el usuario en las distintas franjas horarias, por curso y mes. Los valores se agrupan para determinar el comportamiento del usuario en la plataforma y se construye una variable por cada franja diaria y horario, con el fin de obtener el % de conexión en las distintas franjas por usuario.
Variables que la componen:
| Variable | Descripción | Valores | Tipo | Explotación |
|---|---|---|---|---|
| id_usuldap | Usuario del campus | alfanumérico | Categórica | No, identificativo |
| dias_laborable | Proporción de conexiones del usuario a la plataforma LMS moodle en días de diario (lunes a viernes) | entre 0 y 100 | Cardinal | Sí |
| dias_festivo | Proporción de conexiones del usuario a la plataforma LMS moodle en días festivos (sábado y domingo) | entre 0 y 100 | Cardinal | Sí |
| horario_mañana | Proporción de conexiones del usuario a la plataforma LMS moodle en horario de mañana (entre las 7:00 y las 12:59) | entre 0 y 100 | Cardinal | Sí |
| horario_tarde | Proporción de conexiones del usuario a la plataforma LMS moodle en horario de tarde (entre las 13:00 y las 20:59) | entre 0 y 100 | Cardinal | Sí |
| horario_noche | Proporción de conexiones del usuario a la plataforma LMS moodle en horario de tarde (entre las 21:00 y las 6:59) | entre 0 y 100 | Cardinal | Sí |
# se cargan los datos
vPath_moodle = "/media/pluto/departamentos/calidad/1_UDIMA/Medición y Análisis/Estudio segmentación de estudiantes/datos/dim_fotos_usuario/"
# se cargan los datos
moodle = read_delim(paste0(vPath_moodle,"dim_fotos_temporalidad_usuario_00.csv"),
delim = ";",
escape_double = FALSE,
col_types = cols(userid = col_skip(),
porcentaje = col_skip(),
semestre = col_skip()),
trim_ws = TRUE)
moodle2021 = read_delim(paste0(vPath_moodle,"dim_fotos_temporalidad_usuario.csv"),
delim = ",",
escape_double = FALSE,
col_types = cols(userid = col_skip(),
porcentaje = col_skip(),
semestre = col_skip()),
trim_ws = TRUE)
# se unen
moodle = rbind(moodle, moodle2021)
# se reducen dos franjas horarias
moodle$franja[moodle$franja == "mediodia"] = "tarde"
moodle$franja[moodle$franja == "madrugada"] = "noche"
# se obtienen totales por usuario y franja
moodle_totales_franja = moodle %>%
group_by(id_usuldap = username,
ano_academico,
orden_periodo,
total) %>%
count() %>%
group_by(id_usuldap) %>%
summarise(total = sum(total))
# se calculan los totales por franja
moodle_franja = moodle %>%
group_by(id_usuldap = username,
franja) %>%
summarise(cantidad = sum(cantidad))
# se cruzan
moodle_union = list(moodle_franja, moodle_totales_franja) %>% reduce(left_join)
# se transforman las variables cualitativas mediante la técnica One-Hot-Encoding, con la función dummy del paquete fastDummies al juego de datos inicial se añaden las columnas de la variables
moodle_union = dummy_cols(moodle_union, select_columns = c("franja"))
# se traslada la cantidad a la franja correspondiente
moodle_temporalidad = moodle_union %>%
group_by(id_usuldap,
total) %>%
summarise(franja_laborable = ifelse(franja_laborable == 1,
cantidad,
NA),
franja_festivo = ifelse(franja_festivo == 1,
cantidad,
NA),
franja_mañana = ifelse(franja_mañana == 1,
cantidad,
NA),
franja_tarde = ifelse(franja_tarde == 1,
cantidad,
NA),
franja_noche = ifelse(franja_noche == 1,
cantidad,
NA))
# se calculan las cantidades totales de cada franja
moodle_temporalidad = moodle_temporalidad %>%
group_by(id_usuldap,
total) %>%
summarise(franja_laborable = sum(franja_laborable, na.rm = TRUE),
franja_festivo = sum(franja_festivo, na.rm = TRUE),
franja_mañana = sum(franja_mañana, na.rm = TRUE),
franja_tarde = sum(franja_tarde, na.rm = TRUE),
franja_noche = sum(franja_noche, na.rm = TRUE))
# se calcula el porcentaje de cada franja
moodle_temporalidad = moodle_temporalidad %>%
group_by(id_usuldap) %>%
summarise(franja_laborable = round(100*franja_laborable/total, 2),
franja_festivo = round(100*franja_festivo/total, 2),
franja_mañana = round(100*franja_mañana/total, 2),
franja_tarde = round(100*franja_tarde/total, 2),
franja_noche = round(100*franja_noche/total, 2))
# se renombran las variables
names(moodle_temporalidad) = c("id_usuldap", "dias_laborable", "dias_festivo",
"horario_mañana", "horario_tarde", "horario_noche")
# se incluyen los datos de acceso a los de rto_total
rto_total = list(rto_total, moodle_temporalidad) %>% reduce(left_join)
# arreglo datos
# se excluyen los registros que provienen de
rto_total = rto_total %>%
filter(!is.na(ste_codalf), # matrículas del curso actual (ste_codalf = NA)
!is.na(any_anyaca_inicio), # y sin curso de inicio identificado
tasa_eficiencia <= 100, # planes que dependen de un doble grado
t_evaluacion <= 100, # planes que dependen de un doble grado
!is.na(acceso), # expedientes sin acceso identificado
cen_codnum != 11282 # se excluye antigua Facultad
)
# Se discretiza any_anyaca_acceso
rto_total$any_anyaca_acceso_dis = cut(as.numeric(substr(rto_total$any_anyaca_acceso,
start= 0,
stop = 4)),
breaks = c(1964, 1981, 1996, 2011, 2026), # cortes
labels = c("1965-80", "1981-95", "1996-2010", "2011-25")) # nuevos valores
# any_anyaca_inicio
rto_total$any_anyaca_inicio_dis = cut(as.numeric(substr(rto_total$any_anyaca_inicio,
start= 0,
stop = 4)),
breaks = c(2007, 2014, 2020, 2026), # cortes
labels = c("2008-13", "2014-19", "2020-25")) # nuevos valores
# se exportan los datos
write_csv(rto_total, paste0(vPath_datos, "rto_total_identificacion.csv"))
# Se cargan los datos de las transformaciones anteriores
vPath_datos = "/home/alejandra.bonilla/sincro/privado/MU_CienciaDatos_UOC/2022-23_1S/TFM/PEC3 - Diseño e implementación del trabajo/datos/"
rto_total = read_csv(paste0(vPath_datos, "rto_total_identificacion.csv"))
La calidad de los datos es elevada ya que:
# Se comprueba que las variables tienen valores únicos, homogéneos y que concuerdan con la definición de variables
# curso de inicio
sort(unique(rto_total$any_anyaca_inicio_dis))
## [1] "2008-13" "2014-19" "2020-25"
# tipo de estudios
sort(unique(rto_total$ste_codalf))
## [1] 0 1
# Se comprueba que las variables tienen valores únicos, homogéneos y que concuerdan con la definición de variables
# motivo estudios
sort(unique(rto_total$il_motivo_estudios))
## [1] 0 1
# recomendacion de estudios en encuesta de egresados
sort(unique(rto_total$sa_titulacion_recomendacion))
## [1] 50 100
# Se crea un vector con las variables categóricas
var_caracter = c('cen_codnum',
'any_anyaca_acceso',
'any_anyaca_inicio')
# Se crea vector de variables numéricas a partir de las categóricas
no_pers = rto_total
no_pers$id_usuldap = NULL
no_pers$numdocsinletra = NULL
var_num = names(no_pers)[!names(no_pers) %in% var_caracter]
# Para las variables numéricas se estudian los valores extremos
sapply(no_pers[, var_num], range, na.rm = TRUE)
## est_codmec pla_codalf exp_numord ste_codalf sexo nacionalidad titulado
## [1,] "2500011" "100" "0" "0" "0" "0" "0"
## [2,] "4317707" "587" "3552" "1" "1" "1" "3"
## tasa_eficiencia t_exito t_evaluacion t_rec t_sup_req edad_inicio acceso
## [1,] "0" "0" "0" "0" "0" "17" "0"
## [2,] "100" "100" "100" "106.67" "166.67" "78" "1"
## complementos tasa_abandono traslado_expediente n_nodos_fin_titulacion
## [1,] "0" "0" "0" "0"
## [2,] "1" "1" "1" "4"
## duracion_media_estudios nota_media sa_asig_R sa_asig_participacion
## [1,] "1" "2.075" "0" "0"
## [2,] "13" "10" "1" "100"
## sa_asig_organizacion sa_asig_manual sa_asig_materiales sa_asig_actividades
## [1,] "1" "1" "1" "1"
## [2,] "5" "5" "5" "5"
## sa_asig_docente sa_asig_aprendiendo sa_asig_comentarios sa_curso_R
## [1,] "1" "2.86" "-0.8" "0"
## [2,] "5" "100" "1" "1"
## sa_curso_participacion sa_curso_nivel_academico sa_curso_implicacion
## [1,] "0" "1" "1"
## [2,] "100" "5" "5"
## sa_curso_aprovechamiento_recursos sa_curso_titulacion
## [1,] "1" "1"
## [2,] "5" "5"
## sa_curso_recomendacion sa_curso_comentarios sa_titulacion_R
## [1,] "25" "-1" "0"
## [2,] "100" "1" "1"
## sa_titulacion_participacion sa_titulacion_nivel_academico
## [1,] "0" "1"
## [2,] "100" "5"
## sa_titulacion_implicacion sa_titulacion_aprovechamiento_recursos
## [1,] "1" "1"
## [2,] "5" "5"
## sa_titulacion_mejora_profesional sa_titulacion_obtener_trabajo
## [1,] "1" "1"
## [2,] "5" "5"
## sa_titulacion_titulacion sa_titulacion_recomendacion
## [1,] "1" "50"
## [2,] "5" "100"
## sa_titulacion_comentarios il_R il_participacion il_motivo_estudios
## [1,] "-1" "0" "0" "0"
## [2,] "1" "1" "100" "1"
## il_consecuencia_estudios il_trabajo_actual
## [1,] "0" "0"
## [2,] "1" "1"
## il_trabajo_actual_relacionado_estudios il_comentarios
## [1,] "0" "-1"
## [2,] "1" "1"
## any_anyaca_acceso_dis any_anyaca_inicio_dis dias_laborable dias_festivo
## [1,] "1965-80" "2008-13" "0" "0"
## [2,] "2011-25" "2020-25" "100" "100"
## horario_mañana horario_tarde horario_noche
## [1,] "0" "0" "0"
## [2,] "100" "100" "100"
En el apartado Definición de variables ya se había indicado que t_rec y t_sup_req pueden superar el 100% ya que están calculadas frentes a los ECTS requeridos para finalizar la titulación, pero pueden superarse más ECTS de los requeridos (optativas, menciones, especialidades).
Se discretizan las variables categóricas para poder estudiar sus distribuciones y correlaciones, así como para tener identificadas las variables cualitativas/categóricas como variables discretas (factor).
# Se comprueba la distribución de valores mediante los estadísticos básicos de estas variables
summary(rto_total[, var_caracter])
## cen_codnum any_anyaca_acceso any_anyaca_inicio
## Min. :11416 Length:38864 Length:38864
## 1st Qu.:11417 Class :character Class :character
## Median :11417 Mode :character Mode :character
## Mean :11418
## 3rd Qu.:11419
## Max. :11420
Se comprueba la distribución de valores mediante boxplot de algunas variables numéricas.
# Aplicando la función melt del paquete reshape se transforman todas las variables en una única para poder aplicar la función boxplot de manera única y comparada (en la misma escala de valores)
boxplot(data = melt(rto_total[, var_num[1:20]]),
value~variable,
las = 2,
ylab = "Valores",
xlab = "Variables",
main = "Boxplot de variables numéricas",
col = "lightgreen")
Como hay variables numéricas en escalas muy dispares se va a comprobar la distribución de valores de variables numéricas similares, creando cuatro agrupaciones distintas: escala -1 a 1; escala 0 a 1; escala 0 a 10 y escala 0 a 100.
Se obtienen las siguientes conclusiones:
# Se crea un vector de variables numericos escala -1:1
var_num_max_1 = c("sa_asig_comentarios",
"sa_curso_comentarios",
"sa_titulacion_comentarios",
"il_comentarios")
# Aplicando la función melt del paquete reshape se transforman todas las variables en una única para poder aplicar la función boxplot de manera única y comparada (en la misma escala de valores)
boxplot(data = melt(rto_total[, var_num_max_1]),
value~variable,
las = 2,
ylab = "Valores",
xlab = "Variables",
main = "Boxplot de variables numéricas escala -1:1",
col = "lightgreen")
# Se crea un vector de variables numericos escala 0 a 1
var_num_dicot = c("ste_codalf",
"sexo",
"nacionalidad",
"acceso",
"complementos",
"tasa_abandono",
"traslado_expediente",
"sa_asig_R",
"sa_curso_R",
"sa_titulacion_R",
"il_R",
"il_motivo_estudios",
"il_consecuencia_estudios",
"il_trabajo_actual",
"il_trabajo_actual_relacionado_estudios")
# Aplicando la función melt del paquete reshape se transforman todas las variables en una única para poder aplicar la función boxplot de manera única y comparada (en la misma escala de valores)
boxplot(data = melt(rto_total[, var_num_dicot]),
value~variable,
las = 2,
ylab = "Valores",
xlab = "Variables",
main = "Boxplot de variables numéricas escala 0 a 1",
col = "lightgreen")
# Se crea un vector de variables numericos escala 0:10
var_num_1_10 = c("titulado",
"n_nodos_fin_titulacion",
"duracion_media_estudios",
"nota_media",
"sa_asig_organizacion",
"sa_asig_manual",
"sa_asig_materiales",
"sa_asig_actividades",
"sa_asig_docente",
"sa_curso_nivel_academico",
"sa_curso_implicacion",
"sa_curso_aprovechamiento_recursos",
"sa_curso_titulacion",
"sa_titulacion_nivel_academico",
"sa_titulacion_implicacion",
"sa_titulacion_aprovechamiento_recursos",
"sa_titulacion_mejora_profesional",
"sa_titulacion_obtener_trabajo",
"sa_titulacion_titulacion")
# Aplicando la función melt del paquete reshape se transforman todas las variables en una única para poder aplicar la función boxplot de manera única y comparada (en la misma escala de valores)
boxplot(data = melt(rto_total[, var_num_1_10]),
value~variable,
las = 2,
ylab = "Valores",
xlab = "Variables",
main = "Boxplot de variables numéricas escala 0 y próximo a 10",
col = "lightgreen")
De nuevo, se recuerda que en el apartado Definición de variables ya se había indicado que t_rec y t_sup_req pueden superar el 100% ya que están calculadas frentes a los ECTS requeridos para finalizar la titulación, pero pueden superarse más ECTS de los requeridos (optativas, menciones, especialidades).
# Se crea un vector de variables numericos escala 0-100
var_num_0_100 = c("edad_inicio",
"tasa_eficiencia",
"t_exito",
"t_evaluacion",
"t_rec",
"t_sup_req",
"sa_asig_participacion",
"sa_curso_participacion",
"sa_titulacion_participacion",
"il_participacion" ,
"sa_asig_aprendiendo",
"sa_curso_recomendacion",
"sa_titulacion_recomendacion",
"dias_laborable",
"dias_festivo",
"horario_mañana",
"horario_tarde",
"horario_noche")
# Aplicando la función melt del paquete reshape se transforman todas las variables en una única para poder aplicar la función boxplot de manera única y comparada (en la misma escala de valores)
boxplot(data = melt(rto_total[, var_num_0_100]),
value~variable,
las = 2,
ylab = "Valores",
xlab = "Variables",
main = "Boxplot de variables numéricas escala 0-100",
col = "lightgreen")
Para proceder con el análisis de correlaciones es necesario realizar transformaciones a las variables cualitativas anteriores por lo que en la Fase siguiente se realizarán tanto las transformaciones como el análisis de correlaciones.
El objetivo de esta fase es preparar los datos para asegurar la calidad de los mismos según las conclusiones y/o necesidades detectadas en la fase anterior (Fase II) así como la obtención de conclusiones del estudio de correlaciones. Es decir, en esta fase, a los datos iniciales (input) se aplican algunas operaciones de limpieza, normalización, discretización y reducción de dimensionalidad para obtener unos datos de calidad (output) que permitirán la siguiente fase de modelado (Fase IV).
Para ello se van a llevar a cabo las siguientes acciones:
Síntesis de las tareas de limpieza y acondicionado realizadas en fases previas (imputación de datos ausentes).
Transformación de las variables cualitativas mediante la técnica One-Hot-Encoding.
Estudio de correlaciones entre variables cuantitativas y variables cualitativas transformadas, extrayendo conclusiones.
A lo largo del desarrollo del trabajo se han ido introduciendo tareas de limpieza y acondicionado. Algunas de ellas se encuentran incluso en la fase de construcción de los históricos de resultados. A continuación se resumen las acciones realizadas hasta este punto del proyecto:
En la construcción de los históricos de resultados se han asociado los valores ausentes “” a NA y las variables se han convertido al tipo de datos oportuno (numérico, factor, etc.).
En la Fase II, y previa a la descripción de variables del juego de datos, se ha ido revisando que las variables con datos ausentes guarden una lógica con el aspecto a estudiar (progreso académico del estudiantado, que puede o no participar en las encuestas y que ha podido finalizar, abandonar o progresar en el estudio).
En la presente Fase se comprueba la cantidad de datos ausentes por variable.
# se visualiza
colSums(is.na(rto_total))
## est_codmec pla_codalf
## 0 0
## exp_numord id_usuldap
## 0 0
## numdocsinletra ste_codalf
## 0 0
## cen_codnum sexo
## 0 0
## nacionalidad any_anyaca_acceso
## 0 0
## any_anyaca_inicio titulado
## 0 0
## tasa_eficiencia t_exito
## 0 0
## t_evaluacion t_rec
## 0 0
## t_sup_req edad_inicio
## 0 0
## acceso complementos
## 0 0
## tasa_abandono traslado_expediente
## 0 0
## n_nodos_fin_titulacion duracion_media_estudios
## 0 0
## nota_media sa_asig_R
## 2981 7433
## sa_asig_participacion sa_asig_organizacion
## 7433 27938
## sa_asig_manual sa_asig_materiales
## 25817 27977
## sa_asig_actividades sa_asig_docente
## 25819 25809
## sa_asig_aprendiendo sa_asig_comentarios
## 31120 31992
## sa_curso_R sa_curso_participacion
## 16495 16495
## sa_curso_nivel_academico sa_curso_implicacion
## 31350 32857
## sa_curso_aprovechamiento_recursos sa_curso_titulacion
## 31316 31341
## sa_curso_recomendacion sa_curso_comentarios
## 32831 35293
## sa_titulacion_R sa_titulacion_participacion
## 20609 20609
## sa_titulacion_nivel_academico sa_titulacion_implicacion
## 36577 36975
## sa_titulacion_aprovechamiento_recursos sa_titulacion_mejora_profesional
## 36558 35560
## sa_titulacion_obtener_trabajo sa_titulacion_titulacion
## 37190 34977
## sa_titulacion_recomendacion sa_titulacion_comentarios
## 37014 37486
## il_R il_participacion
## 18155 18155
## il_motivo_estudios il_consecuencia_estudios
## 36057 36443
## il_trabajo_actual il_trabajo_actual_relacionado_estudios
## 36044 36733
## il_comentarios any_anyaca_acceso_dis
## 38390 0
## any_anyaca_inicio_dis dias_laborable
## 0 3689
## dias_festivo horario_mañana
## 3689 3689
## horario_tarde horario_noche
## 3689 3689
Se decide imputar datos en función del significado de las variables: algunas de ellas, al no tener valor, se imputa 0; y otras, que su valor es desconocido, principalmente porque el estudiante no ha participado en las encuestas, se imputa la mediana (métrica robusta a los outliers).
Se imputa 0 en las variables que aún no han registrado valor:
sa_titulacion_participacion y sa_titulacion_R total del estudiantado que no ha egresado ni participado en el estudio;
il_participacion e il_R total del estudiantado que no ha egresado ni participado en el estudio;
sa_asig_comentarios, sa_curso_comentarios, sa_titulacion_comentarios, il_comentarios si no se han registrado comentarios en las encuestas (el valor 0 aporta connotación neutra en los sentimientos expresados);
il_motivo_estudios, il_consecuencia_estudios, il_trabajo_actual, il_trabajo_actual_relacionado_estudios la variables dicotómicas del estudio de inserción se imputa el valor ‘No’ = 0.
Nota: a diferencia de sa_asig_participacion y sa_curso_participacion, donde se imputará le mediana porque los históricos correspondientes no comprenden todos los cursos académicos (desde 2012-13 y 2017-18, respectivamente), en los datos ausentes de la participación en las encuestas/estudios a egresados (sa_titulacion_participacion y il_participacion) sí se imputa 0 dado que se ha realizado dichos estudios a todos los egresados hasta la fecha, por lo que, si no han egresado, su participación en el mismo ha de ser 0%.
Se imputa la mediana (métrica robusta a los outliers) a las variables que, pese a no tener valor, imputar 0 como en el caso anterior supondría tener el peor valor posible del aspecto medido:
nota_media: hay estudiantes, en progreso o que han abandonado que hasta el momento no han registrado calificaciones;
sa_asig_participacion total del estudiantado que su participación no está recogida en el histórico (se recuerda que este no cuenta con datos anteriores a 2012-13. Esto se considera una limitación);
sa_curso_participacion total del estudiantado que su participación no está recogida en el histórico (se recuerda que el estudio se inició en 2017-18. Esto se considera una limitación);
los distintos ítems de las encuestas de satisfacción de asignaturas (sa_asig_organizacion, sa_asig_manual, sa_asig_materiales, sa_asig_actividades, sa_asig_docente, sa_asig_aprendiendo) tienen distinto nivel de participación debido a que el formato ha variado en el tiempo y no es obligatorio responder a ningún ítem;
los distintos ítems de las encuestas de satisfacción con el curso (sa_curso_nivel_academico, sa_curso_implicacion, sa_curso_aprovechamiento_recursos, sa_curso_titulacion, sa_curso_recomendacion) tienen distinto nivel de participación debido a que el formato ha variado en el tiempo y no es obligatorio responder a ningún ítem;
los distintos ítems de las encuestas de satisfacción de egresados con la titulaciones (sa_titulacion_nivel_academico, sa_titulacion_implicacion, sa_titulacion_aprovechamiento_recursos, sa_titulacion_mejora_profesional, sa_titulacion_obtener_trabajo, sa_titulacion_titulacion, sa_titulacion_recomendacion) tienen distinto nivel de participación debido a que el formato ha variado en el tiempo y no es obligatorio responder a ningún ítem;
las variables de utilización de la plataforma de formación moodle (dias_laborable, dias_festivo, horario_madrugada, horario_mañana, horario_tarde, horario_noche) coinciden en valores, total del estudiantado que no ha registrado movimiento en moodle entre los cursos recogidos (“2012-13” a “2020-21”). Esto se considera una limitación.
Tras la imputación, se comprueba de nuevo la distribución de los datos y la no existencia de datos ausentes.
# sobre los valores ausentes se gestionan, por un lado, la imputación de 0 y de la mediana
v_imput_0 = c('sa_titulacion_R', 'sa_titulacion_participacion',
# inserción laboral
'il_R', 'il_participacion',
# comentarios en encuestas (0 valor neutro)
'sa_asig_comentarios', 'sa_curso_comentarios', 'sa_titulacion_comentarios', 'il_comentarios',
# insercion laboral (variables dicotómicas)
'il_motivo_estudios', 'il_consecuencia_estudios', 'il_trabajo_actual',
'il_trabajo_actual_relacionado_estudios')
v_imput_mediana = c('nota_media',
# encuesta asginatura
'sa_asig_organizacion', 'sa_asig_manual', 'sa_asig_materiales', 'sa_asig_actividades',
'sa_asig_docente', 'sa_asig_aprendiendo',
# encuesta curso
'sa_curso_nivel_academico', 'sa_curso_implicacion', 'sa_curso_aprovechamiento_recursos',
'sa_curso_titulacion', 'sa_curso_recomendacion',
# encuesta egresados
'sa_titulacion_nivel_academico', 'sa_titulacion_implicacion', 'sa_titulacion_aprovechamiento_recursos',
'sa_titulacion_mejora_profesional', 'sa_titulacion_obtener_trabajo', 'sa_titulacion_titulacion',
'sa_titulacion_recomendacion',
# moodle
'dias_laborable', 'dias_festivo', 'horario_mañana', 'horario_tarde', 'horario_noche',
# encuesta asginatura
'sa_asig_R','sa_asig_participacion',
# encuesta curso
'sa_curso_R', 'sa_curso_participacion')
# se imputa la mediana
rto_total = rto_total %>% mutate(across(v_imput_mediana,
~replace_na(., median(., na.rm=TRUE))))
# se imputa 0
rto_total = rto_total %>% mutate(across(v_imput_0,
~replace_na(., 0)))
# Se comprueba que no haya valores nulos
colSums(is.na(rto_total))
## est_codmec pla_codalf
## 0 0
## exp_numord id_usuldap
## 0 0
## numdocsinletra ste_codalf
## 0 0
## cen_codnum sexo
## 0 0
## nacionalidad any_anyaca_acceso
## 0 0
## any_anyaca_inicio titulado
## 0 0
## tasa_eficiencia t_exito
## 0 0
## t_evaluacion t_rec
## 0 0
## t_sup_req edad_inicio
## 0 0
## acceso complementos
## 0 0
## tasa_abandono traslado_expediente
## 0 0
## n_nodos_fin_titulacion duracion_media_estudios
## 0 0
## nota_media sa_asig_R
## 0 0
## sa_asig_participacion sa_asig_organizacion
## 0 0
## sa_asig_manual sa_asig_materiales
## 0 0
## sa_asig_actividades sa_asig_docente
## 0 0
## sa_asig_aprendiendo sa_asig_comentarios
## 0 0
## sa_curso_R sa_curso_participacion
## 0 0
## sa_curso_nivel_academico sa_curso_implicacion
## 0 0
## sa_curso_aprovechamiento_recursos sa_curso_titulacion
## 0 0
## sa_curso_recomendacion sa_curso_comentarios
## 0 0
## sa_titulacion_R sa_titulacion_participacion
## 0 0
## sa_titulacion_nivel_academico sa_titulacion_implicacion
## 0 0
## sa_titulacion_aprovechamiento_recursos sa_titulacion_mejora_profesional
## 0 0
## sa_titulacion_obtener_trabajo sa_titulacion_titulacion
## 0 0
## sa_titulacion_recomendacion sa_titulacion_comentarios
## 0 0
## il_R il_participacion
## 0 0
## il_motivo_estudios il_consecuencia_estudios
## 0 0
## il_trabajo_actual il_trabajo_actual_relacionado_estudios
## 0 0
## il_comentarios any_anyaca_acceso_dis
## 0 0
## any_anyaca_inicio_dis dias_laborable
## 0 0
## dias_festivo horario_mañana
## 0 0
## horario_tarde horario_noche
## 0 0
Se busca que los datos estén en la forma adecuada (variación entre la forma de recogida y explotación concreta, aplicando técnicas de normalización y/o discretización).
Para poder realizar una correlación entre variables cualitativas y cuantitativas se procede a transformar las variables cualitativas mediante la técnica One-Hot-Encoding, con la función dummy_cols del paquete fastDummies.
Esta técnica crea una variable para cada valor de una variable categórica indicando 1 si la variable toma el valor x y 0 si no. Por ejemplo, en el caso de la variable sexo que toma el valor Hombre/Mujer, mediante la aplicación de esta técnica se generarán dos nuevas variables:
sexo_Hombre: tomando el valor 1 para los registros que en la variable sexo toman el valor “Hombre” y 0 para los que toman en valor “Mujer”.
sexo_Mujer: en este caso, al contrario que en la variable anterior, la nueva variable tomará el valor 1 para los registros que toman el valor “Mujer” en la variable primitiva y el valor 0 para los que toman el valor “Hombre”.
# para poder trabajar con la fuente de datos a estudiar (sin ningún tipo de identificación)
# se excluyen las variables identificativas
data = rto_total
data$est_codmec = NULL
data$pla_codalf = NULL
data$exp_numord = NULL
data$id_usuldap = NULL
data$numdocsinletra = NULL
data$any_anyaca_acceso = data$any_anyaca_acceso_dis
data$any_anyaca_inicio = data$any_anyaca_inicio_dis
data$any_anyaca_acceso_dis = NULL
data$any_anyaca_inicio_dis = NULL
# se exportan los datos
write_csv(data, paste0(vPath_datos, "rto_total_limpio.csv"))
# Se crea df auxiliar al que añadir las nuevas variables
data_dummy = dummy_cols(data, select_columns = var_caracter)
# Del dataset con variables dummy se eliminan las que no lo son
data_dummy = select(data_dummy,
-var_caracter)
# dimensiones pre
print(paste0("Las dimensiones de este juego de datos sin aplicar la técnica 'One-Hot-Encoding' son: ",
dim(data)[1], " registros y ",
dim(data)[2], " variables. Al aplicarla, las dimensiones aumentan a: ",
dim(data_dummy)[1], " registros y ",
dim(data_dummy)[2], " variables."))
## [1] "Las dimensiones de este juego de datos sin aplicar la técnica 'One-Hot-Encoding' son: 38864 registros y 59 variables. Al aplicarla, las dimensiones aumentan a: 38864 registros y 68 variables."
Como se ha comentado en la fase de recopilación de datos, la construcción del juego de datos proviene del cruce de distintas fuentes, dando lugar a la suma de todas las variables anteriormente descritas y relacionadas.
A continuación se describen las variables contenidas en el juego de datos y el rango de valores que permiten:
Variables que la componen:
| Variable | Descripción | Valores | Tipo | Explotación |
|---|---|---|---|---|
| ste_codalf | Tipo de estudios | 0: Grado, 1: Máster | Cardinal | Sí |
| est_codmec | Código MEC plan | 7 caracteres numéricos | Categórica | No, identificativo |
| cen_codnum | Código MEC centro | 5 caracteres numéricos | Categórica | Sí |
| pla_codalf | Código plan | 3 caracteres numéricos | Categórica | No, identificativo |
| exp_numord | Número de expediente | Numérico | Categórica | No, identificativo |
| sexo | Sexo | 1: Mujer, 0: Hombre | Cardinal | Sí |
| edad_inicio | Edad inicio estudios | >0 | Cardinal | Sí |
| id_usuldap | Usuario del campus | alfanumérico | Categórica | No, identificativo |
| nacionalidad | 1ª Nacionalidad | 1: española, 0: no | Cardinal | Sí |
| numdocsinletra | Nº documento | alfanumérico | Categórica | No, identificativo |
| any_anyaca_acceso | Curso de vía acceso | Discretizada: ‘1965-80’; ‘1981-95’; ‘1996-2010’; ‘2011-25’ | Categórica | Sí |
| any_anyaca_inicio | Curso inicio estudios | Discretizada: ‘2008-13’; ‘2014-19’; ‘2020-25’ | Categórica | Sí |
| titulado | Titulación finalizada | >=0 | Cardinal | Sí |
| tasa_eficiencia | 100*ECTS superados/matriculados | >=0 | Cardinal | Sí |
| t_exito | 100*ECTS superados/presentados | >=0 | Cardinal | Sí |
| t_evaluacion | 100*ECTS presentados/matriculados | >=0 | Cardinal | Sí |
| t_rec | 100*ECTS reconocidos/total a superar | >=0 | Cardinal | Sí |
| t_sup_req | 100*ECTS (superados+reconocidos)/total a superar | >=0 | Cardinal | Sí |
| acceso | Tipo acceso presentado | 1: Titulado Universitario, 0: No | Cardinal | Sí |
| complementos | Requiere complementos | 1: Sí, 0: No | Cardinal | Sí |
| traslado_expediente | Traslado de expediente | 1: Sí, 0: No | Cardinal | Sí |
| n_nodos_fin_titulacion | Nº de nodos de finalización (si >1, distintas especialidades) | >=0 | Cardinal | Sí |
| duracion_media_estudios | Número de cursos donde formaliza matrícula. | >=0 | Cardinal | Sí |
| tasa_abandono | 0: si se titula, no se traslada y tiene matrícula activa en dos últimos cursos; 1: en el resto de casos | 1: Sí, 0: No | Cardinal | Sí |
| nota_media | Media ponderada ECTS superados en Udima | >=0 | Cardinal | Sí |
| sa_asig_R | Representatividad de la muestra | 1: “Sí”, 0: “No” | Cardinal | Sí |
| sa_asig_participacion | Proporción de encuestas respondidas por el estudiante en las asignaturas del plan respecto de las que han sido enviadas | entre 0 y 1 | Cardinal | Sí |
| sa_asig_organizacion | Promedio de valoraciones aportadas por el estudiante en las asignaturas para el ítem La organización de la asignatura facilita el aprendizaje de esta asignatura. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_asig_manual | Promedio de valoraciones aportadas por el estudiante en las asignaturas para el ítem El manual facilita el aprendizaje de esta asignatura | >=1 y <= 5 | Cardinal | Sí |
| sa_asig_materiales | Promedio de valoraciones aportadas por el estudiante en las asignaturas para el ítem Otros materiales didácticos aportados facilitan el aprendizaje de esta asignatura | >=1 y <= 5 | Cardinal | Sí |
| sa_asig_actividades | Promedio de valoraciones aportadas por el estudiante en las asignaturas para el ítem Las actividades didácticas planteadas facilitan el aprendizaje de esta asignatura | >=1 y <= 5 | Cardinal | Sí |
| sa_asig_docente | Promedio de valoraciones aportadas por el estudiante en las asignaturas para el ítem La labor del docente facilita el aprendizaje de esta asignatura | >=1 y <= 5 | Cardinal | Sí |
| sa_asig_aprendiendo | Porcentaje de respuestas Sí al ítem ¿Consideras que estás aprendiendo? respecto de las encuestas respondidas por el estudiante en las asignaturas | entre 0 y 1 | Cardinal | Sí |
| sa_asig_comentarios | Promedio de la connotación del contenido de los comentarios realizados por el estudiante en las encuestas de las asignaturas | entre -1 y 1 | Cardinal | Sí |
| sa_curso_R | Representatividad de la muestra | 1: “Sí”, 0: “No” | Cardinal | Sí |
| sa_curso_participacion | Proporción de encuestas respondidas por el estudiante en los cursos matriculados en el plan respecto de las que han sido enviadas | entre 0 y 1 | Cardinal | Sí |
| sa_curso_nivel_academico | Promedio de valoraciones aportadas por el estudiante en los cursos matriculados en el plan para el ítem ‘Mi nivel académico y de conocimientos a la hora de afrontar los estudios’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_curso_implicacion | Promedio de valoraciones aportadas por el estudiante en los cursos matriculados en el plan para el ítem ‘Mi implicación con los estudios’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_curso_aprovechamiento_recursos | Promedio de valoraciones aportadas por el estudiante en los cursos matriculados en el plan para el ítem ‘Mi aprovechamiento de los recursos didácticos disponibles’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_curso_titulacion | Promedio de valoraciones aportadas por el estudiante en los cursos matriculados en el plan para el ítem ‘Grado de satisfacción general con la titulación’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_curso_recomendacion | Proporción de respuestas Sí al ítem ¿Recomendarías estudiar en la Udima a otra persona? respecto de las encuestas respondidas por el estudiante en los cursos matriculados en el plan | entre 0 y 1 | Cardinal | Sí |
| sa_curso_comentarios | Promedio de la connotación del contenido de los comentarios realizados por el estudiante en las encuestas de curso | entre -1 y 1 | Cardinal | Sí |
| sa_titulacion_R | Representatividad de la muestra | 1: “Sí”, 0: “No” | Cardinal | Sí |
| sa_titulacion_participacion | Proporción de encuestas respondidas por el egresado en los cursos de egreso en el plan respecto de las que han sido enviadas | entre 0 y 1 | Cardinal | Sí |
| sa_titulacion_nivel_academico | Promedio de valoraciones aportadas por el estudiante en los cursos egresados en el plan para el ítem ‘Mi nivel académico y de conocimientos a la hora de afrontar los estudios’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_titulacion_implicacion | Promedio de valoraciones aportadas por el estudiante en los cursos egresados en el plan para el ítem ‘Mi implicación con los estudios’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_titulacion_aprovechamiento_recursos | Promedio de valoraciones aportadas por el estudiante en los cursos egresados en el plan para el ítem ‘Mi aprovechamiento de los recursos didácticos disponibles’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_titulacion_mejora_profesional | Promedio de valoraciones aportadas por el estudiante en los cursos egresados en el plan para el ítem ‘La titulación obtenida ha supuesto una mejora profesional’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_titulacion_obtener_trabajo | Promedio de valoraciones aportadas por el estudiante en los cursos egresados en el plan para el ítem ‘La titulación obtenida ha supuesto obtener un puesto de trabajo’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_titulacion_titulacion | Promedio de valoraciones aportadas por el estudiante en los cursos egresados en el plan para el ítem ‘Grado de satisfacción general con la titulación’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_titulacion_recomendacion | Proporción de respuestas Sí al ítem ¿Recomendarías estudiar en la Udima a otra persona? respecto de las encuestas respondidas por el estudiante en los cursos egresados en el plan | entre 0 y 1 | Cardinal | Sí |
| sa_titulacion_comentarios | Promedio de la connotación del contenido de los comentarios realizados por el estudiante egresado en las encuestas del título | entre -1 y 1 | Cardinal | Sí |
| il_R | Representatividad de la muestra | 1: “Sí”, 0: “No” | Cardinal | Sí |
| il_participacion | Proporción de encuestas respondidas por el egresado en los cursos de egreso y estudios en el plan respecto de las que han sido enviadas (estudios tipo I y II, realizados respectivamente, al año y dos años de egresar) | entre 0 y 1 | Cardinal | Sí |
| il_motivo_estudios | Valoración aportada por el egresado en los estudios tipo I y II en el plan para el ítem ¿Por qué realizaste tus estudios en UDIMA? | 1: Mejora laboral; 0: Otros | Cardinal | Sí |
| il_consecuencia_estudios | Valoración aportada por el egresado en los estudios tipo I y II en el plan para el ítem ¿Qué ha supuesto la realización de los estudios? | 1: Conseguir o mejorar un empleo; 0: No variación u Otro | Cardinal | Sí |
| il_trabajo_actual | Valoración aportada por el egresado en los estudios tipo I y II en el plan para el ítem ¿Trabajas actualmente? | Sí; No | Cardinal | Sí |
| il_trabajo_actual_relacionado_estudios | Valoración aportada por el egresado en los estudios tipo I y II en el plan para el ítem ¿Trabajas actualmente en alguna actividad relacionada con los estudios finalizados? | Sí; No | Cardinal | Sí |
| il_comentarios | Promedio de la connotación del contenido de los comentarios realizados por el estudiante egresado en el estudio de inserción laboral del título | entre -1 y 1 | Cardinal | Sí |
| dias_laborable | Proporción de conexiones del usuario a la plataforma LMS moodle en días de diario (lunes a viernes) | entre 0 y 100 | Cardinal | Sí |
| dias_festivo | Proporción de conexiones del usuario a la plataforma LMS moodle en días festivos (sábado y domingo) | entre 0 y 100 | Cardinal | Sí |
| horario_mañana | Proporción de conexiones del usuario a la plataforma LMS moodle en horario de mañana (entre las 7:00 y las 12:59) | entre 0 y 100 | Cardinal | Sí |
| horario_tarde | Proporción de conexiones del usuario a la plataforma LMS moodle en horario de tarde (entre las 13:00 y las 20:59) | entre 0 y 100 | Cardinal | Sí |
| horario_noche | Proporción de conexiones del usuario a la plataforma LMS moodle en horario de tarde (entre las 21:00 y las 6:59) | entre 0 y 100 | Cardinal | Sí |
Nota: Se recuerda que t_rec y t_sup_req pueden superar el 100% ya que están calculadas frentes a los ECTS requeridos para finalizar la titulación, pero pueden superarse más ECTS de los requeridos (optativas, menciones, especialidades, etc.).
Representatividad de la muestra (determina si la muestra es estadísticamente significativa): Dado que las respuestas recibidas responden a un muestreo se determina la obtención de muestra representativa mediante la fórmula:
\[Muestra\ representativa\ (n)\ = \frac{\frac{z^{2}\ p\ (1-p)\ }{e^{2}}}{1 + \frac{z^{2}\ p\ (1-p)\ }{e^{2} N\ }}\]
Siendo:
Nivel de confianza (NC) del 80%, lo que implica Z-score (z) de 1.282.
Proporción esperada (p): para maximizar el tamaño muestral será de 0.5 (50%).
Error muestral (e) del 10%.
Población (N): cantidad total de usuarios a los que se invita a participar en el estudio.
Para poder llevar a cabo el desarrollo de los distintos objetivos específicos es necesario obtener distintas bases de datos:
Esta fuente de datos recoge todas las variables definidas hasta el momento sin restringirse a ningún perfil de estudiante.
# se visualiza
summary(data_dummy)
## ste_codalf sexo nacionalidad titulado
## Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:1.0000 1st Qu.:0.0000
## Median :1.0000 Median :1.0000 Median :1.0000 Median :1.0000
## Mean :0.6777 Mean :0.5605 Mean :0.8799 Mean :0.5897
## 3rd Qu.:1.0000 3rd Qu.:1.0000 3rd Qu.:1.0000 3rd Qu.:1.0000
## Max. :1.0000 Max. :1.0000 Max. :1.0000 Max. :3.0000
## tasa_eficiencia t_exito t_evaluacion t_rec
## Min. : 0.00 Min. : 0.00 Min. : 0.00 Min. : 0.000
## 1st Qu.: 74.07 1st Qu.: 94.74 1st Qu.: 83.33 1st Qu.: 0.000
## Median :100.00 Median :100.00 Median :100.00 Median : 0.000
## Mean : 80.27 Mean : 87.46 Mean : 84.32 Mean : 7.257
## 3rd Qu.:100.00 3rd Qu.:100.00 3rd Qu.:100.00 3rd Qu.: 10.000
## Max. :100.00 Max. :100.00 Max. :100.00 Max. :106.670
## t_sup_req edad_inicio acceso complementos
## Min. : 0.00 Min. :17.00 Min. :0.0000 Min. :0.00000
## 1st Qu.: 42.50 1st Qu.:25.00 1st Qu.:1.0000 1st Qu.:0.00000
## Median :100.00 Median :29.00 Median :1.0000 Median :0.00000
## Mean : 75.44 Mean :31.05 Mean :0.7728 Mean :0.08617
## 3rd Qu.:100.00 3rd Qu.:36.00 3rd Qu.:1.0000 3rd Qu.:0.00000
## Max. :166.67 Max. :78.00 Max. :1.0000 Max. :1.00000
## tasa_abandono traslado_expediente n_nodos_fin_titulacion
## Min. :0.0000 Min. :0.00000 Min. :0.0000
## 1st Qu.:0.0000 1st Qu.:0.00000 1st Qu.:0.0000
## Median :0.0000 Median :0.00000 Median :1.0000
## Mean :0.2101 Mean :0.01508 Mean :0.6164
## 3rd Qu.:0.0000 3rd Qu.:0.00000 3rd Qu.:1.0000
## Max. :1.0000 Max. :1.00000 Max. :4.0000
## duracion_media_estudios nota_media sa_asig_R
## Min. : 1.000 Min. : 2.075 Min. :0.0000
## 1st Qu.: 1.000 1st Qu.: 7.320 1st Qu.:0.0000
## Median : 2.000 Median : 7.890 Median :0.0000
## Mean : 1.959 Mean : 7.836 Mean :0.1192
## 3rd Qu.: 2.000 3rd Qu.: 8.400 3rd Qu.:0.0000
## Max. :13.000 Max. :10.000 Max. :1.0000
## sa_asig_participacion sa_asig_organizacion sa_asig_manual sa_asig_materiales
## Min. : 0.00 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.: 0.00 1st Qu.:4.330 1st Qu.:4.000 1st Qu.:4.200
## Median : 0.00 Median :4.330 Median :4.000 Median :4.200
## Mean : 19.64 Mean :4.299 Mean :3.998 Mean :4.166
## 3rd Qu.: 30.77 3rd Qu.:4.330 3rd Qu.:4.000 3rd Qu.:4.200
## Max. :100.00 Max. :5.000 Max. :5.000 Max. :5.000
## sa_asig_actividades sa_asig_docente sa_asig_aprendiendo sa_asig_comentarios
## Min. :1.000 Min. :1.000 Min. : 2.86 Min. :-0.80000
## 1st Qu.:4.270 1st Qu.:4.440 1st Qu.: 90.91 1st Qu.: 0.00000
## Median :4.270 Median :4.440 Median : 90.91 Median : 0.00000
## Mean :4.229 Mean :4.381 Mean : 88.47 Mean : 0.02511
## 3rd Qu.:4.270 3rd Qu.:4.440 3rd Qu.: 90.91 3rd Qu.: 0.00000
## Max. :5.000 Max. :5.000 Max. :100.00 Max. : 1.00000
## sa_curso_R sa_curso_participacion sa_curso_nivel_academico
## Min. :0.0000 Min. : 0.00 Min. :1.000
## 1st Qu.:0.0000 1st Qu.: 0.00 1st Qu.:4.000
## Median :0.0000 Median : 0.00 Median :4.000
## Mean :0.1106 Mean : 15.19 Mean :4.011
## 3rd Qu.:0.0000 3rd Qu.: 0.00 3rd Qu.:4.000
## Max. :1.0000 Max. :100.00 Max. :5.000
## sa_curso_implicacion sa_curso_aprovechamiento_recursos sa_curso_titulacion
## Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:4.670 1st Qu.:4.000 1st Qu.:4.000
## Median :4.670 Median :4.000 Median :4.000
## Mean :4.629 Mean :4.014 Mean :3.976
## 3rd Qu.:4.670 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :5.000 Max. :5.000 Max. :5.000
## sa_curso_recomendacion sa_curso_comentarios sa_titulacion_R
## Min. : 25.00 Min. :-1.000000 Min. :0.0000
## 1st Qu.:100.00 1st Qu.: 0.000000 1st Qu.:0.0000
## Median :100.00 Median : 0.000000 Median :0.0000
## Mean : 99.44 Mean : 0.008141 Mean :0.1002
## 3rd Qu.:100.00 3rd Qu.: 0.000000 3rd Qu.:0.0000
## Max. :100.00 Max. : 1.000000 Max. :1.0000
## sa_titulacion_participacion sa_titulacion_nivel_academico
## Min. : 0.00 Min. :1.000
## 1st Qu.: 0.00 1st Qu.:4.000
## Median : 0.00 Median :4.000
## Mean : 10.05 Mean :4.008
## 3rd Qu.: 0.00 3rd Qu.:4.000
## Max. :100.00 Max. :5.000
## sa_titulacion_implicacion sa_titulacion_aprovechamiento_recursos
## Min. :1.000 Min. :1.000
## 1st Qu.:5.000 1st Qu.:4.000
## Median :5.000 Median :4.000
## Mean :4.976 Mean :4.011
## 3rd Qu.:5.000 3rd Qu.:4.000
## Max. :5.000 Max. :5.000
## sa_titulacion_mejora_profesional sa_titulacion_obtener_trabajo
## Min. :1.000 Min. :1.000
## 1st Qu.:4.000 1st Qu.:3.000
## Median :4.000 Median :3.000
## Mean :3.967 Mean :3.002
## 3rd Qu.:4.000 3rd Qu.:3.000
## Max. :5.000 Max. :5.000
## sa_titulacion_titulacion sa_titulacion_recomendacion sa_titulacion_comentarios
## Min. :1.000 Min. : 50 Min. :-1.000000
## 1st Qu.:4.000 1st Qu.:100 1st Qu.: 0.000000
## Median :4.000 Median :100 Median : 0.000000
## Mean :4.018 Mean :100 Mean : 0.004704
## 3rd Qu.:4.000 3rd Qu.:100 3rd Qu.: 0.000000
## Max. :5.000 Max. :100 Max. : 1.000000
## il_R il_participacion il_motivo_estudios
## Min. :0.00000 Min. : 0.000 Min. :0.00000
## 1st Qu.:0.00000 1st Qu.: 0.000 1st Qu.:0.00000
## Median :0.00000 Median : 0.000 Median :0.00000
## Mean :0.07261 Mean : 7.261 Mean :0.04786
## 3rd Qu.:0.00000 3rd Qu.: 0.000 3rd Qu.:0.00000
## Max. :1.00000 Max. :100.000 Max. :1.00000
## il_consecuencia_estudios il_trabajo_actual
## Min. :0.00000 Min. :0.00000
## 1st Qu.:0.00000 1st Qu.:0.00000
## Median :0.00000 Median :0.00000
## Mean :0.04032 Mean :0.06201
## 3rd Qu.:0.00000 3rd Qu.:0.00000
## Max. :1.00000 Max. :1.00000
## il_trabajo_actual_relacionado_estudios il_comentarios dias_laborable
## Min. :0.00000 Min. :-1.0000000 Min. : 0.00
## 1st Qu.:0.00000 1st Qu.: 0.0000000 1st Qu.: 54.09
## Median :0.00000 Median : 0.0000000 Median : 61.22
## Mean :0.04204 Mean : 0.0004307 Mean : 60.96
## 3rd Qu.:0.00000 3rd Qu.: 0.0000000 3rd Qu.: 67.69
## Max. :1.00000 Max. : 1.0000000 Max. :100.00
## dias_festivo horario_mañana horario_tarde horario_noche
## Min. : 0.00 Min. : 0.00 Min. : 0.00 Min. : 0.00
## 1st Qu.: 32.31 1st Qu.: 17.50 1st Qu.: 45.42 1st Qu.: 10.84
## Median : 38.78 Median : 25.30 Median : 52.18 Median : 18.27
## Mean : 39.04 Mean : 26.46 Mean : 51.90 Mean : 21.23
## 3rd Qu.: 45.91 3rd Qu.: 33.62 3rd Qu.: 58.74 3rd Qu.: 27.94
## Max. :100.00 Max. :100.00 Max. :100.00 Max. :100.00
## cen_codnum_11416 cen_codnum_11417 cen_codnum_11418 cen_codnum_11419
## Min. :0.0000 Min. :0.0000 Min. :0.00000 Min. :0.0000
## 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.00000 1st Qu.:0.0000
## Median :0.0000 Median :0.0000 Median :0.00000 Median :0.0000
## Mean :0.2048 Mean :0.3938 Mean :0.07081 Mean :0.2663
## 3rd Qu.:0.0000 3rd Qu.:1.0000 3rd Qu.:0.00000 3rd Qu.:1.0000
## Max. :1.0000 Max. :1.0000 Max. :1.00000 Max. :1.0000
## cen_codnum_11420 any_anyaca_acceso_1965-80 any_anyaca_acceso_1981-95
## Min. :0.00000 Min. :0.000000 Min. :0.00000
## 1st Qu.:0.00000 1st Qu.:0.000000 1st Qu.:0.00000
## Median :0.00000 Median :0.000000 Median :0.00000
## Mean :0.06425 Mean :0.005609 Mean :0.07814
## 3rd Qu.:0.00000 3rd Qu.:0.000000 3rd Qu.:0.00000
## Max. :1.00000 Max. :1.000000 Max. :1.00000
## any_anyaca_acceso_1996-2010 any_anyaca_acceso_2011-25
## Min. :0.0000 Min. :0.0000
## 1st Qu.:0.0000 1st Qu.:0.0000
## Median :0.0000 Median :0.0000
## Mean :0.4209 Mean :0.4953
## 3rd Qu.:1.0000 3rd Qu.:1.0000
## Max. :1.0000 Max. :1.0000
## any_anyaca_inicio_2008-13 any_anyaca_inicio_2014-19 any_anyaca_inicio_2020-25
## Min. :0.0000 Min. :0.0000 Min. :0.00000
## 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.00000
## Median :0.0000 Median :1.0000 Median :0.00000
## Mean :0.3468 Mean :0.5567 Mean :0.09654
## 3rd Qu.:1.0000 3rd Qu.:1.0000 3rd Qu.:0.00000
## Max. :1.0000 Max. :1.0000 Max. :1.00000
Esta fuente de datos, a su vez, puede dividirse en:
Estudiantes que han egresado.
Estudiantes que no han egresado. Esta, a su vez, puede subdividirse en:
Estudiantes que abandonan los estudios.
Estudiantes en progreso.
Para poder aplicar las técnicas correspondientes, se normaliza el juego de datos de forma que estén centrados y escalados.
Como se ha visto anteriormente, hay distintas escalas en las variables numéricas a utilizar. Para que el análisis sea fiable y no esté influida por el “mayor peso” que aportan las variables en escala mayor se procede al escalado de las variables de modo que todas tengan media 0 y desviación estándar 1.
# se normaliza el juego de datos
data_dummy_esc = as.data.frame(scale(data_dummy, # variables numéricas a normalizar, todas
center = TRUE,
scale = TRUE))
Se obtienen dos juegos de datos con los registros del estudiantado titulado (uno escalado y otro no). La estructura es idéntica a la del juego de datos anterior.
# se filtran los datos de titulados
rto_fin = data_dummy %>%
filter(titulado > 0)
# datos escalados
rto_fin_esc = data_dummy_esc %>%
filter(titulado > min(unique(titulado)))
# dimensiones
print(paste0("Las dimensiones del juego de datos con los registros del estudiantado titulado son: ",
dim(rto_fin)[1], " registros y ",
dim(rto_fin)[2], " variables."))
## [1] "Las dimensiones del juego de datos con los registros del estudiantado titulado son: 22708 registros y 68 variables."
Se obtienen dos juegos de datos con los registros del estudiantado no titulado (uno escalado y otro no). La estructura es idéntica a la del juego de datos anterior.
# se filtran los datos de no titulados
rto_no_fin = data_dummy %>%
filter(titulado == 0)
# datos escalados
rto_no_fin_esc = data_dummy_esc %>%
filter(titulado == min(unique(titulado)))
# dimensiones
print(paste0("Las dimensiones del juego de datos con los registros del estudiantado NO titulado son: ",
dim(rto_no_fin)[1], " registros y ",
dim(rto_no_fin)[2], " variables."))
## [1] "Las dimensiones del juego de datos con los registros del estudiantado NO titulado son: 16156 registros y 68 variables."
Se obtienen dos juegos de datos con los registros del estudiantado que abandona (uno escalado y otro no). La estructura es idéntica a la del juego de datos anterior.
# se filtran los datos de abandonos
rto_abandono = rto_no_fin %>%
filter(tasa_abandono == 1)
# datos escalados
rto_abandono_esc = data_dummy_esc %>%
filter(tasa_abandono == max(unique(tasa_abandono)),
titulado == min(unique(titulado)))
# dimensiones
print(paste0("Las dimensiones del juego de datos con los registros del estudiantado que abandona o traslada expediente son: ",
dim(rto_abandono)[1], " registros y ",
dim(rto_abandono)[2], " variables."))
## [1] "Las dimensiones del juego de datos con los registros del estudiantado que abandona o traslada expediente son: 8167 registros y 68 variables."
Se obtienen dos juegos de datos con los registros del estudiantado que titula o abandona (uno escalado y otro no). La estructura es idéntica a la del juego de datos anterior.
# se obtiene juego de datos de titulados y abandono (fusión)
rto_fin_abandono = rbind(rto_fin,
rto_abandono)
# se obtiene sin variables dummy
rto_fin_abandono_esc = rbind(rto_fin_esc ,
rto_abandono_esc)
# dimensiones
print(paste0("Las dimensiones del juego de datos con los registros del estudiantado que titula o abandona son: ",
dim(rto_fin_abandono)[1], " registros y ",
dim(rto_fin_abandono)[2], " variables."))
## [1] "Las dimensiones del juego de datos con los registros del estudiantado que titula o abandona son: 30875 registros y 68 variables."
Se obtienen dos juegos de datos con los registros del estudiantado en progreso (uno escalado y otro no). La estructura es idéntica a la del juego de datos anterior. Este juego de datos se empleará para resolver el objetivo específico 3.
# se filtran los datos en progreso
rto_progreso = rto_no_fin %>%
filter(tasa_abandono == 0)
# datos escalados
rto_progreso_esc = data_dummy_esc %>%
filter(titulado == min(unique(titulado)),
tasa_abandono == min(unique(tasa_abandono)))
# dimensiones
print(paste0("Las dimensiones del juego de datos con los registros del estudiantado en progreso son: ",
dim(rto_progreso)[1], " registros y ",
dim(rto_progreso)[2], " variables."))
## [1] "Las dimensiones del juego de datos con los registros del estudiantado en progreso son: 7989 registros y 68 variables."
Se calcula el coeficiente de correlación entre las variables numéricas para determinar si es estadísticamente significativo (p-value) haciendo uso de la función cor del paquete stats, aplicado use=“pairwise.complete.obs” para omitir los valores ausentes en relaciones dos a dos.
Se representa gráficamente a partir de la función chart.Correlation del paquete PerformanceAnalytics.
# Se calcula el coeficiente de correlación entre las variables numéricas y dummy para determinar si es estadísticamente significativo (p-value).
cor_data_dummy = round(cor(data_dummy_esc,
use="pairwise.complete.obs"), #se omiten los valores ausentes
digits=2)
#S e convierte a df
df_cor_data_dummy = data.frame(cor_data_dummy)
# Se elimina la propia correlación en la diagonal asignando valor 0
diag(df_cor_data_dummy) = 0
# Se representa gráficamente (no se visualiza correctamente)
chart.Correlation(df_cor_data_dummy,
histogram = TRUE,
method = "pearson")
Como el gráfico no se interpreta bien, se muestra la matriz de correlaciones:
# Se muestra df
tab_corr(df_cor_data_dummy,
triangle = "lower")
| ste_codalf | sexo | nacionalidad | titulado | tasa_eficiencia | t_exito | t_evaluacion | t_rec | t_sup_req | edad_inicio | acceso | complementos | tasa_abandono | traslado_expediente | n_nodos_fin_titulacion | duracion_media_estudios | nota_media | sa_asig_R | sa_asig_participacion | sa_asig_organizacion | sa_asig_manual | sa_asig_materiales | sa_asig_actividades | sa_asig_docente | sa_asig_aprendiendo | sa_asig_comentarios | sa_curso_R | sa_curso_participacion | sa_curso_nivel_academico | sa_curso_implicacion | sa_curso_aprovechamiento_recursos | sa_curso_titulacion | sa_curso_recomendacion | sa_curso_comentarios | sa_titulacion_R | sa_titulacion_participacion | sa_titulacion_nivel_academico | sa_titulacion_implicacion | sa_titulacion_aprovechamiento_recursos | sa_titulacion_mejora_profesional | sa_titulacion_obtener_trabajo | sa_titulacion_titulacion | sa_titulacion_recomendacion | sa_titulacion_comentarios | il_R | il_participacion | il_motivo_estudios | il_consecuencia_estudios | il_trabajo_actual | il_trabajo_actual_relacionado_estudios | il_comentarios | dias_laborable | dias_festivo | horario_mañana | horario_tarde | horario_noche | cen_codnum_11416 | cen_codnum_11417 | cen_codnum_11418 | cen_codnum_11419 | cen_codnum_11420 | any_anyaca_acceso_1965.80 | any_anyaca_acceso_1981.95 | any_anyaca_acceso_1996.2010 | any_anyaca_acceso_2011.25 | any_anyaca_inicio_2008.13 | any_anyaca_inicio_2014.19 | any_anyaca_inicio_2020.25 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ste_codalf | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| sexo | 0.491*** | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| nacionalidad | -0.188 | 0.003 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| titulado | 0.698*** | 0.441*** | -0.016 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| tasa_eficiencia | 0.698*** | 0.528*** | -0.001 | 0.794*** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| t_exito | 0.684*** | 0.525*** | -0.007 | 0.814*** | 0.744*** | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| t_evaluacion | 0.692*** | 0.547*** | 0.022 | 0.796*** | 0.734*** | 0.777*** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| t_rec | -0.036 | -0.025 | 0.244* | 0.215 | 0.244* | 0.260* | 0.249* | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| t_sup_req | 0.673*** | 0.494*** | -0.017 | 0.792*** | 0.795*** | 0.804*** | 0.802*** | 0.143 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| edad_inicio | -0.504*** | -0.301* | -0.051 | -0.374** | -0.417*** | -0.417*** | -0.420*** | 0.250* | -0.404*** | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| acceso | 0.704*** | 0.479*** | -0.218 | 0.731*** | 0.713*** | 0.696*** | 0.713*** | -0.172 | 0.723*** | -0.528*** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| complementos | 0.648*** | 0.364** | -0.467*** | 0.449*** | 0.430*** | 0.413*** | 0.436*** | -0.385** | 0.390** | -0.327** | 0.666*** | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| tasa_abandono | -0.704*** | -0.566*** | -0.019 | -0.762*** | -0.821*** | -0.844*** | -0.834*** | -0.205 | -0.801*** | 0.484*** | -0.742*** | -0.478*** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| traslado_expediente | -0.751*** | -0.441*** | 0.197 | -0.745*** | -0.729*** | -0.722*** | -0.748*** | 0.050 | -0.739*** | 0.450*** | -0.747*** | -0.689*** | 0.700*** | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
| n_nodos_fin_titulacion | 0.699*** | 0.435*** | -0.001 | 0.730*** | 0.803*** | 0.826*** | 0.801*** | 0.205 | 0.796*** | -0.370** | 0.717*** | 0.429*** | -0.778*** | -0.739*** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| duracion_media_estudios | -0.346** | -0.211 | 0.268* | -0.013 | 0.024 | -0.010 | 0.012 | 0.717*** | -0.098 | 0.349** | -0.356** | -0.509*** | 0.077 | 0.334** | 0.012 | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| nota_media | 0.723*** | 0.352** | -0.118 | 0.752*** | 0.675*** | 0.700*** | 0.718*** | 0.119 | 0.745*** | -0.247* | 0.719*** | 0.441*** | -0.651*** | -0.677*** | 0.755*** | -0.110 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| sa_asig_R | 0.009 | 0.274* | 0.105 | 0.200 | 0.269* | 0.265* | 0.280* | 0.410*** | 0.218 | 0.185 | 0.025 | -0.077 | -0.282* | -0.115 | 0.222 | 0.386** | 0.171 | |||||||||||||||||||||||||||||||||||||||||||||||||||
| sa_asig_participacion | 0.016 | 0.250* | 0.119 | 0.227 | 0.285* | 0.280* | 0.298* | 0.401*** | 0.240* | 0.135 | 0.041 | -0.061 | -0.308* | -0.139 | 0.243* | 0.397*** | 0.169 | 0.477*** | ||||||||||||||||||||||||||||||||||||||||||||||||||
| sa_asig_organizacion | -0.076 | -0.115 | -0.185 | -0.185 | -0.207 | -0.201 | -0.212 | -0.166 | -0.195 | 0.093 | -0.111 | 0.089 | 0.258* | 0.135 | -0.199 | -0.068 | -0.159 | -0.270* | -0.304* | |||||||||||||||||||||||||||||||||||||||||||||||||
| sa_asig_manual | -0.055 | -0.092 | -0.200 | -0.153 | -0.177 | -0.166 | -0.174 | -0.135 | -0.166 | 0.097 | -0.090 | 0.119 | 0.227 | 0.109 | -0.170 | -0.045 | -0.110 | -0.220 | -0.289* | 0.772*** | ||||||||||||||||||||||||||||||||||||||||||||||||
| sa_asig_materiales | -0.068 | -0.113 | -0.205 | -0.179 | -0.204 | -0.199 | -0.204 | -0.165 | -0.192 | 0.092 | -0.105 | 0.103 | 0.252* | 0.126 | -0.189 | -0.077 | -0.139 | -0.276* | -0.322** | 0.709*** | 0.762*** | |||||||||||||||||||||||||||||||||||||||||||||||
| sa_asig_actividades | -0.080 | -0.128 | -0.193 | -0.188 | -0.212 | -0.206 | -0.213 | -0.144 | -0.197 | 0.101 | -0.111 | 0.080 | 0.260* | 0.143 | -0.197 | -0.063 | -0.160 | -0.267* | -0.305* | 0.760*** | 0.729*** | 0.751*** | ||||||||||||||||||||||||||||||||||||||||||||||
| sa_asig_docente | -0.082 | -0.117 | -0.199 | -0.202 | -0.227 | -0.221 | -0.228 | -0.172 | -0.210 | 0.080 | -0.118 | 0.080 | 0.270* | 0.139 | -0.218 | -0.075 | -0.173 | -0.295* | -0.315** | 0.762*** | 0.774*** | 0.773*** | 0.708*** | |||||||||||||||||||||||||||||||||||||||||||||
| sa_asig_aprendiendo | 0.089 | -0.131 | -0.274* | -0.164 | -0.232 | -0.237 | -0.250* | -0.501*** | -0.179 | -0.130 | 0.074 | 0.245* | 0.270* | 0.057 | -0.186 | -0.405*** | -0.065 | -0.652*** | -0.671*** | 0.659*** | 0.644*** | 0.667*** | 0.666*** | 0.685*** | ||||||||||||||||||||||||||||||||||||||||||||
| sa_asig_comentarios | -0.121 | 0.151 | 0.089 | 0.115 | 0.200 | 0.199 | 0.216 | 0.532*** | 0.141 | 0.276* | -0.110 | -0.141 | -0.205 | -0.033 | 0.144 | 0.508*** | 0.036 | 0.830*** | 0.696*** | -0.228 | -0.196 | -0.246* | -0.240* | -0.233 | -0.719*** | |||||||||||||||||||||||||||||||||||||||||||
| sa_curso_R | 0.047 | 0.300* | 0.078 | 0.175 | 0.265* | 0.264* | 0.287* | 0.299* | 0.214 | 0.078 | 0.064 | 0.020 | -0.321** | -0.175 | 0.193 | 0.334** | 0.101 | 0.676*** | 0.687*** | -0.303* | -0.257* | -0.317** | -0.307* | -0.318** | -0.660*** | 0.721*** | ||||||||||||||||||||||||||||||||||||||||||
| sa_curso_participacion | 0.025 | 0.276* | 0.127 | 0.185 | 0.269* | 0.263* | 0.292* | 0.340** | 0.218 | 0.063 | 0.049 | -0.021 | -0.312** | -0.168 | 0.203 | 0.300* | 0.065 | 0.681*** | 0.683*** | -0.308* | -0.271* | -0.317** | -0.313** | -0.335** | -0.660*** | 0.722*** | 0.490*** | |||||||||||||||||||||||||||||||||||||||||
| sa_curso_nivel_academico | 0.034 | 0.174 | -0.006 | 0.048 | 0.047 | 0.040 | 0.047 | 0.064 | 0.026 | 0.067 | 0.010 | 0.061 | 0.011 | -0.045 | 0.048 | 0.061 | 0.127 | 0.099 | 0.071 | 0.375** | 0.408*** | 0.382** | 0.375** | 0.372** | 0.222 | 0.103 | -0.015 | -0.052 | ||||||||||||||||||||||||||||||||||||||||
| sa_curso_implicacion | 0.136 | 0.009 | -0.093 | 0.045 | -0.025 | -0.028 | -0.041 | -0.171 | 0.011 | -0.065 | 0.129 | 0.080 | 0.068 | -0.035 | 0.035 | -0.201 | 0.209 | -0.320** | -0.340** | 0.378** | 0.378** | 0.391*** | 0.376** | 0.379** | 0.538*** | -0.345** | -0.468*** | -0.391*** | 0.486*** | |||||||||||||||||||||||||||||||||||||||
| sa_curso_aprovechamiento_recursos | -0.039 | 0.069 | -0.011 | -0.029 | -0.040 | -0.030 | -0.035 | 0.074 | -0.047 | 0.100 | -0.057 | 0.008 | 0.100 | 0.037 | -0.029 | 0.103 | 0.057 | 0.092 | 0.047 | 0.441*** | 0.445*** | 0.435*** | 0.435*** | 0.433*** | 0.233 | 0.107 | -0.035 | -0.062 | 0.608*** | 0.341** | ||||||||||||||||||||||||||||||||||||||
| sa_curso_titulacion | -0.109 | -0.154 | -0.117 | -0.164 | -0.213 | -0.211 | -0.219 | -0.051 | -0.186 | 0.127 | -0.143 | -0.028 | 0.290* | 0.182 | -0.173 | -0.001 | -0.098 | -0.254* | -0.305* | 0.703*** | 0.699*** | 0.699*** | 0.702*** | 0.701*** | 0.592*** | -0.183 | -0.359** | -0.356** | 0.546*** | 0.674*** | 0.511*** | |||||||||||||||||||||||||||||||||||||
| sa_curso_recomendacion | 0.221 | -0.115 | -0.244* | -0.048 | -0.130 | -0.153 | -0.157 | -0.536*** | -0.072 | -0.199 | 0.199 | 0.286* | 0.162 | -0.042 | -0.076 | -0.516*** | 0.139 | -0.670*** | -0.697*** | 0.441*** | 0.425*** | 0.465*** | 0.454*** | 0.472*** | 0.820*** | -0.764*** | -0.724*** | -0.717*** | 0.168 | 0.635*** | 0.188 | 0.453*** | ||||||||||||||||||||||||||||||||||||
| sa_curso_comentarios | -0.016 | 0.276* | 0.112 | 0.164 | 0.258* | 0.251* | 0.277* | 0.411*** | 0.191 | 0.139 | 0.001 | -0.037 | -0.299* | -0.133 | 0.177 | 0.379** | 0.026 | 0.738*** | 0.759*** | -0.335** | -0.294* | -0.347** | -0.344** | -0.359** | -0.753*** | 0.769*** | 0.824*** | 0.769*** | -0.023 | -0.536*** | -0.067 | -0.379** | -0.874*** | |||||||||||||||||||||||||||||||||||
| sa_titulacion_R | 0.264* | 0.139 | 0.089 | 0.466*** | 0.396*** | 0.377** | 0.397*** | 0.309* | 0.428*** | -0.034 | 0.264* | 0.111 | -0.412*** | -0.349** | 0.484*** | 0.220 | 0.376** | 0.475*** | 0.475*** | -0.211 | -0.172 | -0.211 | -0.208 | -0.227 | -0.423*** | 0.435*** | 0.433*** | 0.454*** | 0.066 | -0.164 | 0.017 | -0.184 | -0.341** | 0.453*** | ||||||||||||||||||||||||||||||||||
| sa_titulacion_participacion | 0.265* | 0.139 | 0.090 | 0.469*** | 0.397*** | 0.379** | 0.398*** | 0.310* | 0.430*** | -0.035 | 0.265* | 0.111 | -0.414*** | -0.350** | 0.480*** | 0.220 | 0.377** | 0.474*** | 0.475*** | -0.211 | -0.172 | -0.211 | -0.208 | -0.227 | -0.423*** | 0.434*** | 0.433*** | 0.454*** | 0.066 | -0.163 | 0.017 | -0.184 | -0.341** | 0.452*** | 0.585*** | |||||||||||||||||||||||||||||||||
| sa_titulacion_nivel_academico | -0.019 | 0.018 | -0.017 | 0.022 | 0.003 | -0.015 | 0.003 | 0.109 | 0.013 | 0.091 | -0.042 | 0.047 | 0.034 | -0.006 | 0.028 | 0.168 | 0.025 | 0.166 | 0.142 | 0.127 | 0.145 | 0.120 | 0.136 | 0.123 | -0.020 | 0.197 | 0.113 | 0.118 | 0.256* | 0.211 | 0.397*** | 0.332** | -0.041 | 0.106 | 0.174 | 0.173 | ||||||||||||||||||||||||||||||||
| sa_titulacion_implicacion | -0.223 | -0.129 | -0.155 | -0.399*** | -0.345** | -0.319** | -0.344** | -0.237 | -0.368** | 0.097 | -0.215 | -0.083 | 0.390** | 0.309* | -0.407*** | -0.162 | -0.263* | -0.424*** | -0.450*** | 0.289* | 0.268* | 0.294* | 0.295* | 0.308* | 0.444*** | -0.370** | -0.451*** | -0.457*** | 0.136 | 0.271* | 0.191 | 0.383** | 0.376** | -0.481*** | -0.712*** | -0.712*** | 0.074 | |||||||||||||||||||||||||||||||
| sa_titulacion_aprovechamiento_recursos | -0.000 | 0.026 | 0.001 | 0.072 | 0.042 | 0.029 | 0.042 | 0.178 | 0.046 | 0.101 | -0.016 | 0.029 | -0.008 | -0.022 | 0.066 | 0.187 | 0.069 | 0.224 | 0.224 | 0.078 | 0.106 | 0.083 | 0.076 | 0.069 | -0.088 | 0.248* | 0.177 | 0.173 | 0.386** | 0.165 | 0.272* | 0.287* | -0.098 | 0.158 | 0.244* | 0.244* | 0.543*** | -0.123 | ||||||||||||||||||||||||||||||
| sa_titulacion_mejora_profesional | -0.168 | -0.125 | -0.096 | -0.309* | -0.284* | -0.276* | -0.280* | -0.183 | -0.296* | 0.059 | -0.187 | 0.006 | 0.317** | 0.238 | -0.314** | -0.091 | -0.244* | -0.289* | -0.298* | 0.274* | 0.251* | 0.274* | 0.263* | 0.272* | 0.350** | -0.258* | -0.278* | -0.279* | 0.140 | 0.190 | 0.183 | 0.376** | 0.262* | -0.318** | -0.385** | -0.385** | 0.440*** | 0.608*** | 0.338** | |||||||||||||||||||||||||||||
| sa_titulacion_obtener_trabajo | 0.012 | -0.028 | -0.066 | -0.044 | -0.079 | -0.079 | -0.071 | -0.067 | -0.066 | 0.013 | -0.007 | 0.086 | 0.102 | 0.035 | -0.054 | -0.025 | -0.044 | -0.076 | -0.089 | 0.131 | 0.148 | 0.134 | 0.145 | 0.153 | 0.146 | -0.062 | -0.071 | -0.066 | 0.180 | 0.143 | 0.182 | 0.264* | 0.134 | -0.095 | -0.017 | -0.018 | 0.555*** | 0.227 | 0.543*** | 0.330** | ||||||||||||||||||||||||||||
| sa_titulacion_titulacion | -0.029 | -0.097 | -0.068 | 0.004 | -0.049 | -0.049 | -0.056 | 0.105 | -0.023 | 0.149 | -0.057 | 0.037 | 0.108 | 0.041 | 0.004 | 0.161 | 0.006 | 0.028 | -0.001 | 0.331** | 0.346** | 0.333** | 0.322** | 0.322** | 0.178 | 0.076 | -0.045 | -0.039 | 0.366** | 0.261* | 0.414*** | 0.410*** | 0.130 | -0.057 | 0.108 | 0.107 | 0.628*** | 0.088 | 0.575*** | 0.288* | 0.623*** | |||||||||||||||||||||||||||
| sa_titulacion_recomendacion | -0.184 | -0.066 | -0.124 | -0.293* | -0.234 | -0.201 | -0.224 | -0.182 | -0.228 | 0.093 | -0.172 | -0.060 | 0.269* | 0.237 | -0.235 | -0.121 | -0.214 | -0.271* | -0.282* | 0.126 | 0.109 | 0.134 | 0.128 | 0.141 | 0.208 | -0.233 | -0.239* | -0.245* | -0.187 | 0.035 | -0.051 | 0.180 | 0.180 | -0.261* | -0.459*** | -0.460*** | 0.173 | 0.547*** | 0.036 | 0.583*** | 0.486*** | 0.267* | ||||||||||||||||||||||||||
| sa_titulacion_comentarios | 0.209 | 0.095 | 0.085 | 0.427*** | 0.341** | 0.311** | 0.335** | 0.333** | 0.371** | 0.028 | 0.194 | 0.085 | -0.354** | -0.295* | 0.436*** | 0.246* | 0.322** | 0.504*** | 0.522*** | -0.221 | -0.180 | -0.233 | -0.223 | -0.246* | -0.464*** | 0.464*** | 0.469*** | 0.480*** | 0.058 | -0.200 | -0.002 | -0.195 | -0.366** | 0.476*** | 0.822*** | 0.822*** | 0.211 | -0.820*** | 0.323** | -0.473*** | 0.012 | 0.217 | -0.515*** | |||||||||||||||||||||||||
| il_R | 0.214 | 0.075 | 0.147 | 0.378** | 0.293* | 0.270* | 0.292* | 0.211 | 0.331** | -0.077 | 0.208 | 0.085 | -0.312** | -0.269* | 0.387** | 0.150 | 0.278* | 0.351** | 0.363** | -0.210 | -0.182 | -0.210 | -0.206 | -0.217 | -0.339** | 0.297* | 0.353** | 0.370** | 0.026 | -0.148 | -0.031 | -0.183 | -0.263* | 0.363** | 0.726*** | 0.726*** | 0.167 | -0.736*** | 0.253* | -0.309* | 0.124 | 0.150 | -0.350** | 0.775*** | ||||||||||||||||||||||||
| il_participacion | 0.214 | 0.075 | 0.147 | 0.378** | 0.293* | 0.270* | 0.292* | 0.211 | 0.331** | -0.077 | 0.208 | 0.085 | -0.312** | -0.269* | 0.387** | 0.150 | 0.278* | 0.351** | 0.363** | -0.210 | -0.182 | -0.210 | -0.206 | -0.217 | -0.339** | 0.297* | 0.353** | 0.370** | 0.026 | -0.148 | -0.031 | -0.183 | -0.263* | 0.363** | 0.726*** | 0.726*** | 0.167 | -0.736*** | 0.253* | -0.309* | 0.124 | 0.150 | -0.350** | 0.775*** | 0.739*** | |||||||||||||||||||||||
| il_motivo_estudios | 0.221 | 0.097 | 0.148 | 0.385** | 0.301* | 0.275* | 0.297* | 0.203 | 0.334** | -0.090 | 0.211 | 0.085 | -0.322** | -0.275* | 0.389** | 0.148 | 0.276* | 0.367** | 0.379** | -0.215 | -0.188 | -0.215 | -0.212 | -0.222 | -0.354** | 0.306* | 0.372** | 0.386** | 0.029 | -0.161 | -0.028 | -0.195 | -0.277* | 0.384** | 0.747*** | 0.746*** | 0.176 | -0.749*** | 0.257* | -0.320** | 0.112 | 0.173 | -0.352** | 0.791*** | 0.797*** | 0.797*** | ||||||||||||||||||||||
| il_consecuencia_estudios | 0.219 | 0.071 | 0.144 | 0.362** | 0.271* | 0.247* | 0.266* | 0.176 | 0.312** | -0.092 | 0.204 | 0.093 | -0.285* | -0.261* | 0.368** | 0.128 | 0.263* | 0.317** | 0.315** | -0.189 | -0.165 | -0.187 | -0.184 | -0.197 | -0.304* | 0.256* | 0.328** | 0.338** | 0.028 | -0.126 | -0.025 | -0.156 | -0.215 | 0.313** | 0.714*** | 0.713*** | 0.216 | -0.714*** | 0.304* | -0.284* | 0.123 | 0.213 | -0.328** | 0.751*** | 0.811*** | 0.811*** | 0.830*** | |||||||||||||||||||||
| il_trabajo_actual | 0.212 | 0.082 | 0.151 | 0.371** | 0.281* | 0.260* | 0.279* | 0.203 | 0.319** | -0.079 | 0.200 | 0.076 | -0.299* | -0.257* | 0.379** | 0.149 | 0.269* | 0.344** | 0.346** | -0.204 | -0.177 | -0.203 | -0.199 | -0.215 | -0.328** | 0.288* | 0.338** | 0.360** | 0.023 | -0.142 | -0.024 | -0.181 | -0.247* | 0.353** | 0.722*** | 0.721*** | 0.174 | -0.735*** | 0.266* | -0.302* | 0.130 | 0.169 | -0.433*** | 0.775*** | 0.768*** | 0.768*** | 0.823*** | 0.803*** | ||||||||||||||||||||
| il_trabajo_actual_relacionado_estudios | 0.208 | 0.058 | 0.150 | 0.366** | 0.274* | 0.244* | 0.267* | 0.175 | 0.315** | -0.079 | 0.196 | 0.084 | -0.284* | -0.258* | 0.373** | 0.143 | 0.266* | 0.321** | 0.328** | -0.190 | -0.165 | -0.188 | -0.185 | -0.200 | -0.305* | 0.266* | 0.326** | 0.344** | 0.024 | -0.122 | -0.020 | -0.162 | -0.224 | 0.328** | 0.720*** | 0.720*** | 0.201 | -0.734*** | 0.305* | -0.285* | 0.146 | 0.194 | -0.358** | 0.768*** | 0.808*** | 0.808*** | 0.864*** | 0.802*** | 0.779*** | |||||||||||||||||||
| il_comentarios | -0.075 | -0.023 | -0.040 | 0.142 | 0.123 | 0.115 | 0.095 | 0.393*** | 0.110 | 0.301* | -0.060 | -0.097 | -0.088 | -0.026 | 0.163 | 0.393*** | 0.185 | 0.373** | 0.425*** | -0.128 | -0.070 | -0.100 | -0.094 | -0.123 | -0.377** | 0.451*** | 0.328** | 0.348** | 0.008 | -0.145 | 0.016 | -0.163 | -0.359** | 0.393*** | 0.447*** | 0.447*** | 0.005 | -0.470*** | 0.098 | -0.440*** | -0.210 | -0.064 | -0.520*** | 0.403*** | 0.399*** | 0.399*** | 0.385** | 0.379** | 0.409*** | 0.423*** | ||||||||||||||||||
| dias_laborable | -0.149 | -0.082 | 0.202 | -0.103 | -0.125 | -0.137 | -0.139 | -0.012 | -0.138 | 0.133 | -0.139 | -0.270* | 0.139 | 0.179 | -0.099 | -0.013 | 0.073 | 0.059 | 0.038 | 0.018 | 0.010 | 0.019 | 0.023 | 0.019 | -0.012 | -0.009 | -0.025 | -0.040 | 0.074 | 0.127 | 0.070 | 0.051 | 0.042 | -0.055 | -0.020 | -0.020 | 0.036 | 0.062 | 0.049 | 0.012 | 0.008 | 0.043 | -0.026 | -0.000 | -0.006 | -0.006 | -0.014 | -0.010 | -0.004 | -0.004 | 0.104 | |||||||||||||||||
| dias_festivo | 0.188 | 0.093 | -0.238 | 0.183 | 0.207 | 0.218 | 0.218 | 0.054 | 0.220 | -0.109 | 0.187 | 0.287* | -0.242* | -0.246* | 0.181 | 0.014 | 0.020 | 0.034 | 0.051 | 0.051 | 0.068 | 0.050 | 0.046 | 0.042 | -0.007 | 0.092 | 0.091 | 0.106 | 0.058 | -0.063 | 0.063 | 0.044 | -0.068 | 0.119 | 0.124 | 0.124 | 0.103 | -0.120 | 0.103 | 0.010 | 0.081 | 0.108 | -0.033 | 0.112 | 0.104 | 0.104 | 0.111 | 0.109 | 0.102 | 0.104 | -0.054 | -0.149 | ||||||||||||||||
| horario_mañana | 0.003 | 0.146 | 0.442*** | 0.132 | 0.161 | 0.154 | 0.159 | 0.145 | 0.122 | -0.084 | 0.025 | -0.302* | -0.177 | -0.038 | 0.140 | 0.092 | 0.148 | 0.206 | 0.212 | -0.149 | -0.154 | -0.157 | -0.151 | -0.156 | -0.231 | 0.122 | 0.181 | 0.188 | 0.072 | -0.012 | 0.031 | -0.104 | -0.190 | 0.164 | 0.140 | 0.141 | 0.043 | -0.139 | 0.078 | -0.101 | -0.018 | -0.034 | -0.102 | 0.125 | 0.151 | 0.151 | 0.160 | 0.147 | 0.145 | 0.144 | 0.056 | 0.288* | -0.314** | |||||||||||||||
| horario_tarde | 0.045 | 0.017 | 0.212 | 0.082 | 0.086 | 0.084 | 0.086 | -0.003 | 0.081 | -0.171 | 0.035 | -0.090 | -0.110 | -0.044 | 0.075 | -0.014 | 0.040 | 0.030 | 0.035 | 0.011 | 0.014 | 0.006 | 0.012 | 0.006 | -0.026 | -0.018 | 0.042 | 0.049 | 0.087 | 0.034 | 0.070 | 0.046 | -0.024 | 0.019 | 0.076 | 0.076 | 0.068 | -0.084 | 0.088 | -0.003 | 0.067 | 0.058 | -0.051 | 0.051 | 0.110 | 0.110 | 0.121 | 0.124 | 0.110 | 0.118 | -0.058 | 0.003 | -0.047 | 0.583*** | ||||||||||||||
| horario_noche | 0.067 | -0.085 | -0.557*** | 0.018 | -0.020 | -0.017 | -0.018 | -0.019 | 0.022 | 0.202 | 0.071 | 0.370** | 0.018 | -0.086 | 0.008 | -0.064 | 0.016 | -0.031 | -0.045 | 0.228 | 0.244* | 0.224 | 0.230 | 0.211 | 0.163 | 0.051 | -0.069 | -0.073 | 0.092 | 0.089 | 0.157 | 0.222 | 0.115 | -0.038 | 0.034 | 0.034 | 0.137 | 0.058 | 0.141 | 0.106 | 0.124 | 0.231 | 0.010 | 0.059 | -0.018 | -0.018 | -0.025 | -0.012 | -0.013 | -0.005 | 0.139 | -0.321** | 0.291* | -0.038 | 0.245* | |||||||||||||
| cen_codnum_11416 | 0.194 | -0.066 | -0.299* | 0.227 | 0.162 | 0.149 | 0.149 | -0.035 | 0.198 | 0.011 | 0.224 | 0.249* | -0.146 | -0.223 | 0.227 | -0.133 | 0.303* | -0.082 | -0.086 | 0.164 | 0.166 | 0.179 | 0.162 | 0.150 | 0.199 | -0.098 | -0.140 | -0.157 | 0.156 | 0.243* | 0.159 | 0.194 | 0.236 | -0.172 | 0.087 | 0.087 | 0.103 | 0.004 | 0.097 | 0.024 | 0.088 | 0.187 | 0.026 | 0.073 | 0.072 | 0.072 | 0.061 | 0.081 | 0.073 | 0.082 | 0.103 | -0.089 | 0.053 | -0.223 | -0.064 | 0.189 | ||||||||||||
| cen_codnum_11417 | 0.358** | -0.038 | -0.014 | 0.296* | 0.255* | 0.255* | 0.242* | -0.236 | 0.278* | -0.262* | 0.357** | 0.254* | -0.261* | -0.308* | 0.280* | -0.246* | 0.294* | -0.223 | -0.217 | 0.202 | 0.207 | 0.220 | 0.209 | 0.207 | 0.312** | -0.291* | -0.215 | -0.232 | 0.139 | 0.274* | 0.125 | 0.220 | 0.344** | -0.289* | 0.017 | 0.018 | 0.094 | 0.041 | 0.082 | 0.091 | 0.143 | 0.175 | -0.001 | -0.037 | 0.045 | 0.045 | 0.043 | 0.070 | 0.048 | 0.059 | -0.182 | -0.064 | 0.039 | -0.012 | 0.071 | -0.068 | 0.503*** | |||||||||||
| cen_codnum_11418 | -0.541*** | -0.376** | -0.042 | -0.500*** | -0.512*** | -0.518*** | -0.501*** | 0.146 | -0.519*** | 0.508*** | -0.564*** | -0.416*** | 0.550*** | 0.589*** | -0.491*** | 0.253* | -0.381** | 0.112 | 0.060 | 0.254* | 0.261* | 0.264* | 0.265* | 0.259* | 0.006 | 0.207 | -0.014 | -0.013 | 0.167 | 0.057 | 0.267* | 0.291* | -0.078 | 0.011 | -0.077 | -0.078 | 0.200 | 0.133 | 0.190 | 0.147 | 0.096 | 0.274* | 0.093 | 0.001 | -0.099 | -0.099 | -0.101 | -0.090 | -0.086 | -0.094 | 0.158 | 0.142 | -0.213 | -0.156 | -0.123 | 0.075 | 0.375** | 0.125 | ||||||||||
| cen_codnum_11419 | 0.113 | 0.438*** | 0.059 | 0.204 | 0.291* | 0.293* | 0.300* | 0.238 | 0.241* | -0.075 | 0.114 | -0.007 | -0.353** | -0.215 | 0.204 | 0.092 | 0.156 | 0.463*** | 0.478*** | -0.271* | -0.240* | -0.276* | -0.275* | -0.290* | -0.462*** | 0.444*** | 0.513*** | 0.501*** | 0.015 | -0.253* | 0.003 | -0.297* | -0.465*** | 0.528*** | 0.275* | 0.275* | 0.061 | -0.292* | 0.102 | -0.197 | -0.051 | -0.082 | -0.082 | 0.285* | 0.226 | 0.226 | 0.243* | 0.211 | 0.217 | 0.209 | 0.185 | -0.047 | 0.026 | 0.189 | -0.069 | -0.144 | 0.290* | 0.119 | 0.226 | |||||||||
| cen_codnum_11420 | -0.763*** | -0.465*** | 0.156 | -0.628*** | -0.608*** | -0.616*** | -0.613*** | 0.250* | -0.631*** | 0.556*** | -0.768*** | -0.593*** | 0.615*** | 0.695*** | -0.604*** | 0.445*** | -0.652*** | 0.132 | 0.111 | 0.047 | 0.043 | 0.045 | 0.050 | 0.054 | -0.219 | 0.272* | 0.066 | 0.095 | 0.033 | -0.166 | 0.092 | 0.134 | -0.316** | 0.150 | -0.076 | -0.077 | 0.180 | 0.068 | 0.188 | 0.151 | 0.085 | 0.203 | 0.090 | 0.019 | -0.034 | -0.034 | -0.039 | -0.033 | -0.032 | -0.032 | 0.202 | 0.069 | -0.164 | -0.098 | -0.115 | -0.028 | 0.116 | -0.141 | 0.791*** | 0.101 | ||||||||
| any_anyaca_acceso_1965.80 | -0.519*** | -0.526*** | 0.105 | -0.464*** | -0.493*** | -0.484*** | -0.496*** | 0.141 | -0.493*** | 0.330** | -0.522*** | -0.489*** | 0.512*** | 0.499*** | -0.444*** | 0.276* | -0.325** | 0.001 | -0.023 | 0.112 | 0.109 | 0.113 | 0.116 | 0.112 | -0.001 | 0.091 | -0.111 | -0.100 | 0.011 | 0.031 | 0.084 | 0.193 | -0.045 | -0.064 | -0.128 | -0.129 | 0.086 | 0.160 | 0.068 | 0.128 | 0.049 | 0.146 | 0.020 | -0.047 | -0.127 | -0.127 | -0.146 | -0.147 | -0.117 | -0.115 | 0.134 | 0.198 | -0.214 | -0.030 | -0.080 | 0.036 | -0.077 | -0.179 | 0.464*** | -0.186 | 0.552*** | |||||||
| any_anyaca_acceso_1981.95 | -0.451*** | -0.514*** | 0.040 | -0.360** | -0.395*** | -0.396*** | -0.403*** | 0.179 | -0.385** | 0.409*** | -0.444*** | -0.412*** | 0.429*** | 0.406*** | -0.344** | 0.298* | -0.229 | 0.050 | 0.027 | 0.151 | 0.152 | 0.147 | 0.158 | 0.153 | -0.014 | 0.148 | -0.073 | -0.059 | 0.071 | 0.043 | 0.143 | 0.220 | -0.058 | -0.022 | -0.063 | -0.064 | 0.106 | 0.123 | 0.094 | 0.105 | 0.033 | 0.185 | -0.008 | 0.008 | -0.077 | -0.077 | -0.087 | -0.085 | -0.068 | -0.068 | 0.202 | 0.139 | -0.143 | -0.049 | -0.128 | 0.101 | -0.039 | -0.136 | 0.411*** | -0.182 | 0.471*** | 0.939*** | ||||||
| any_anyaca_acceso_1996.2010 | -0.106 | -0.238 | -0.202 | 0.030 | -0.052 | -0.047 | -0.076 | 0.226 | -0.011 | 0.345** | -0.086 | -0.118 | 0.119 | 0.117 | 0.033 | 0.160 | 0.187 | -0.076 | -0.097 | 0.111 | 0.118 | 0.123 | 0.125 | 0.108 | 0.095 | -0.045 | -0.216 | -0.221 | 0.072 | 0.198 | 0.091 | 0.191 | 0.131 | -0.193 | -0.022 | -0.021 | 0.038 | 0.129 | 0.038 | 0.036 | -0.002 | 0.160 | 0.056 | 0.004 | -0.063 | -0.063 | -0.090 | -0.079 | -0.060 | -0.059 | 0.274* | 0.109 | -0.134 | -0.166 | -0.180 | 0.220 | 0.221 | -0.067 | 0.150 | -0.229 | 0.080 | 0.456*** | 0.585*** | |||||
| any_anyaca_acceso_2011.25 | 0.297* | 0.412*** | 0.107 | 0.204 | 0.293* | 0.287* | 0.306* | -0.212 | 0.255* | -0.409*** | 0.302* | 0.272* | -0.383** | -0.332** | 0.197 | -0.239* | 0.045 | 0.157 | 0.177 | -0.071 | -0.062 | -0.076 | -0.087 | -0.075 | -0.106 | 0.085 | 0.289* | 0.287* | 0.068 | -0.122 | 0.036 | -0.138 | -0.119 | 0.245* | 0.165 | 0.164 | 0.086 | -0.230 | 0.115 | -0.045 | 0.088 | -0.021 | -0.014 | 0.134 | 0.198 | 0.198 | 0.224 | 0.212 | 0.193 | 0.194 | -0.209 | -0.186 | 0.149 | 0.122 | 0.149 | -0.253* | -0.213 | 0.080 | -0.357** | 0.241* | -0.345** | -0.387** | -0.274* | -0.336** | ||||
| any_anyaca_inicio_2008.13 | -0.047 | -0.344** | -0.150 | -0.007 | -0.093 | -0.086 | -0.119 | 0.093 | -0.045 | 0.315** | -0.042 | -0.075 | 0.133 | 0.131 | -0.005 | -0.008 | 0.186 | -0.297* | -0.313** | 0.212 | 0.198 | 0.224 | 0.226 | 0.216 | 0.318** | -0.278* | -0.448*** | -0.440*** | 0.054 | 0.357** | 0.074 | 0.313** | 0.407*** | -0.473*** | -0.147 | -0.146 | -0.018 | 0.253* | -0.036 | 0.101 | 0.014 | 0.147 | 0.061 | -0.140 | -0.162 | -0.162 | -0.190 | -0.164 | -0.155 | -0.148 | 0.092 | 0.171 | -0.195 | -0.153 | -0.123 | 0.170 | 0.241* | 0.122 | 0.140 | -0.427*** | 0.012 | 0.243* | 0.261* | 0.576*** | -0.622*** | |||
| any_anyaca_inicio_2014.19 | 0.192 | 0.348** | 0.169 | 0.248* | 0.309* | 0.299* | 0.330** | 0.088 | 0.274* | -0.316** | 0.193 | 0.114 | -0.403*** | -0.294* | 0.256* | 0.056 | 0.059 | 0.386** | 0.400*** | -0.195 | -0.169 | -0.200 | -0.200 | -0.201 | -0.378** | 0.358** | 0.491*** | 0.481*** | 0.062 | -0.251* | 0.030 | -0.231 | -0.420*** | 0.495*** | 0.379** | 0.380** | 0.153 | -0.429*** | 0.206 | -0.176 | 0.059 | 0.020 | -0.211 | 0.380** | 0.375** | 0.375** | 0.398*** | 0.372** | 0.365** | 0.360** | 0.010 | -0.237 | 0.237 | 0.130 | 0.098 | -0.179 | -0.205 | -0.070 | -0.248* | 0.394*** | -0.159 | -0.310* | -0.297* | -0.518*** | 0.546*** | -0.357** | ||
| any_anyaca_inicio_2020.25 | -0.245* | 0.035 | -0.135 | -0.361** | -0.297* | -0.294* | -0.293* | -0.342** | -0.330** | 0.073 | -0.237 | -0.043 | 0.375** | 0.226 | -0.392*** | -0.127 | -0.318** | 0.057 | 0.045 | 0.147 | 0.144 | 0.143 | 0.139 | 0.151 | 0.073 | 0.069 | 0.112 | 0.107 | 0.070 | -0.082 | 0.135 | 0.072 | -0.062 | 0.123 | -0.285* | -0.287* | 0.063 | 0.264* | 0.041 | 0.232 | 0.096 | 0.012 | 0.222 | -0.278* | -0.244* | -0.244* | -0.238 | -0.228 | -0.244* | -0.236 | -0.103 | 0.059 | -0.150 | -0.024 | -0.060 | -0.056 | -0.213 | -0.200 | 0.107 | 0.049 | 0.110 | 0.085 | 0.043 | -0.261* | 0.090 | -0.052 | 0.225 | |
| Computed correlation used pearson-method with listwise-deletion. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Como se ha comprobado en el apartado anterior, no es posible obtener conclusiones relevantes de la correlación entre variables según la dimensión actual, por lo que se va a explorar la relación entre variables mediante la aplicación de PCA (Análisis de Componentes Principales), un algoritmo de aprendizaje no supervisado que se centra en la variación de datos, y de SVG (Single Value Decomposition) sobre dicho juego de datos.
El método PCA, al trabajar con varianzas, puede verse condicionado por la presencia de outliers pero ya se comprobó que no había. Además, es necesario no tener valores ausentes (que ya fue resuelto anteriormente).
¿Qué métodos se van a usar para aplicar PCA?
Hay varias opciones para realizar este estudio, de cada método se obtendrán conclusiones relevantes. A continuación se detalla cada método y sus resultados:
Mediante la función prcomp de la librería stats se escalan y centran las variables (solo para el estudio PCA, sin alterar el origen de datos). Para ello, previamente no debe haber valores ausentes (previamente se han tratado los datos). De sus resultados se concluye que el 85% de la varianza acumulada del juego de datos se obtiene en el PC33 (es decir, 35 variables).
# MÉTODO 1: library(stats)
# • prcomp() -> Forma rápida de implementar PCA sobre una matriz de datos.
# • princomp()
# Para escalar las variables, hay dos opciones, centrarlas mediante la función scale(df, center = TRUE, scale = TRUE) y utilizar primcomp o utilizar prcomp (que centra las variables solo para el estudio pca sin alterar el origen de datos), añadiendo la opcion de centrarlas. Esta es la opción que se aplica a continuación
# Se calculan los componentes principales excluyendo los valores ausentes
df_pca_imp_0 = prcomp(data_dummy_esc,# centra las variables para que tengan media cero
scale = FALSE) # desviación estándar sea de uno
# Se muestra el resultado
summary(df_pca_imp_0,
loadings = T)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 2.7234 2.1739 2.12277 1.79657 1.72545 1.53275 1.48957
## Proportion of Variance 0.1091 0.0695 0.06627 0.04747 0.04378 0.03455 0.03263
## Cumulative Proportion 0.1091 0.1786 0.24484 0.29230 0.33608 0.37063 0.40326
## PC8 PC9 PC10 PC11 PC12 PC13 PC14
## Standard deviation 1.45029 1.33402 1.28452 1.25803 1.22714 1.19363 1.17299
## Proportion of Variance 0.03093 0.02617 0.02426 0.02327 0.02215 0.02095 0.02023
## Cumulative Proportion 0.43419 0.46036 0.48463 0.50790 0.53005 0.55100 0.57123
## PC15 PC16 PC17 PC18 PC19 PC20 PC21
## Standard deviation 1.16694 1.14529 1.14079 1.08278 1.07741 1.0398 1.02832
## Proportion of Variance 0.02003 0.01929 0.01914 0.01724 0.01707 0.0159 0.01555
## Cumulative Proportion 0.59126 0.61055 0.62969 0.64693 0.66400 0.6799 0.69545
## PC22 PC23 PC24 PC25 PC26 PC27 PC28
## Standard deviation 1.02297 1.00163 0.99708 0.98850 0.97127 0.95019 0.93801
## Proportion of Variance 0.01539 0.01475 0.01462 0.01437 0.01387 0.01328 0.01294
## Cumulative Proportion 0.71084 0.72559 0.74021 0.75458 0.76845 0.78173 0.79467
## PC29 PC30 PC31 PC32 PC33 PC34 PC35
## Standard deviation 0.91713 0.90473 0.88698 0.8767 0.86344 0.85820 0.8451
## Proportion of Variance 0.01237 0.01204 0.01157 0.0113 0.01096 0.01083 0.0105
## Cumulative Proportion 0.80704 0.81908 0.83065 0.8419 0.85292 0.86375 0.8742
## PC36 PC37 PC38 PC39 PC40 PC41 PC42
## Standard deviation 0.84261 0.80283 0.78925 0.77869 0.75883 0.73349 0.7187
## Proportion of Variance 0.01044 0.00948 0.00916 0.00892 0.00847 0.00791 0.0076
## Cumulative Proportion 0.88469 0.89417 0.90333 0.91225 0.92071 0.92863 0.9362
## PC43 PC44 PC45 PC46 PC47 PC48 PC49
## Standard deviation 0.68130 0.65327 0.62771 0.60942 0.59956 0.57679 0.55280
## Proportion of Variance 0.00683 0.00628 0.00579 0.00546 0.00529 0.00489 0.00449
## Cumulative Proportion 0.94305 0.94932 0.95512 0.96058 0.96587 0.97076 0.97525
## PC50 PC51 PC52 PC53 PC54 PC55 PC56
## Standard deviation 0.49419 0.46791 0.44964 0.44777 0.44315 0.4036 0.39034
## Proportion of Variance 0.00359 0.00322 0.00297 0.00295 0.00289 0.0024 0.00224
## Cumulative Proportion 0.97884 0.98206 0.98504 0.98799 0.99087 0.9933 0.99551
## PC57 PC58 PC59 PC60 PC61 PC62 PC63
## Standard deviation 0.29378 0.27673 0.26861 0.19898 0.16936 0.03303 0.03015
## Proportion of Variance 0.00127 0.00113 0.00106 0.00058 0.00042 0.00002 0.00001
## Cumulative Proportion 0.99678 0.99791 0.99897 0.99955 0.99997 0.99999 1.00000
## PC64 PC65 PC66 PC67 PC68
## Standard deviation 2.687e-06 1.209e-15 4.754e-16 2.868e-16 2.165e-16
## Proportion of Variance 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00
## Cumulative Proportion 1.000e+00 1.000e+00 1.000e+00 1.000e+00 1.000e+00
¿Qué contiene la matriz df_pca?
names(df_pca_imp_0)
## [1] "sdev" "rotation" "center" "scale" "x"
sdev: informa sobre la varianza explicada por cada componente/variable, la proporción respecto al total y la proporción de varianza acumulada.
rotation: contiene el valor de los loadings ϕ para cada componente (eigenvector).
center: contiene la media de las variables previas a la estandarización (en la escala original).
scale: contiene la desviación típica de las variables previas a la estandarización (en la escala original).
x: almacena (en forma de matriz) el resultado de multiplicar el valor de los componentes principales (CP) y los datos de los vectores de loadings.
Con las funciones get_pca_var y get_pca de la librería factoextra se obtienen resultados de las contribuciones de las variables.
Se muestran (ordenadas descendentemente) las contribuciones de la primera y segunda dimensión:
# MÉTODO 2: library(factoextra)
# • get_pca_var() -> Extrae la información sobre las variables.
var = get_pca_var(df_pca_imp_0)
# head(var$contrib) # contribución variables
# • get_pca() -> Extrae la información sobre las observaciones y variables de un análisis PCA.
resultados_pca = get_pca(df_pca_imp_0, "var") # variables (si ind, observaciones)
# se obtiene el top25 del PC1 ordenado
print('El top35 del PC1 ordenado es:')
## [1] "El top35 del PC1 ordenado es:"
sort(resultados_pca$contrib[, 1], decreasing = T)[1:25]
## il_R il_participacion
## 6.8534923 6.8534923
## t_sup_req titulado
## 6.8380721 6.4123034
## il_trabajo_actual tasa_eficiencia
## 6.2880708 5.9650803
## n_nodos_fin_titulacion t_evaluacion
## 5.9085246 5.2584334
## il_motivo_estudios sa_titulacion_participacion
## 5.0504018 4.7325803
## sa_titulacion_R il_trabajo_actual_relacionado_estudios
## 4.7165729 4.6413580
## il_consecuencia_estudios tasa_abandono
## 4.5384915 4.4301002
## t_exito ste_codalf
## 4.2560010 2.2518062
## acceso sa_curso_participacion
## 1.9402109 1.4058310
## sa_asig_participacion sa_titulacion_implicacion
## 1.3576136 1.3469626
## sa_curso_R sa_asig_R
## 1.1201823 1.0429267
## nota_media sa_titulacion_comentarios
## 0.7544009 0.6793106
## any_anyaca_inicio_2014-19
## 0.6598199
# se obtiene el top25 del PC2 ordenado
print('El top35 del PC2 ordenado es:')
## [1] "El top35 del PC2 ordenado es:"
sort(resultados_pca$contrib[, 2], decreasing = T)[1:25]
## t_sup_req tasa_eficiencia
## 6.8563873 6.2831469
## ste_codalf il_R
## 6.1944155 5.8179710
## il_participacion il_trabajo_actual
## 5.8179710 5.6331942
## t_evaluacion titulado
## 5.5462491 5.1559402
## acceso t_exito
## 5.0521631 5.0029675
## il_motivo_estudios il_trabajo_actual_relacionado_estudios
## 4.5509837 4.3050644
## n_nodos_fin_titulacion il_consecuencia_estudios
## 4.3026218 4.1463559
## tasa_abandono sa_titulacion_R
## 3.7266259 1.9874727
## sa_titulacion_participacion cen_codnum_11420
## 1.9779607 1.5283373
## sa_curso_participacion sa_titulacion_implicacion
## 1.3383812 1.0303557
## sa_asig_participacion edad_inicio
## 0.9941060 0.9778073
## sa_curso_R nota_media
## 0.9708567 0.9072542
## sa_asig_R
## 0.8030056
Se estudia la Descomposición de Valores Únicos y de los valores que lo caracterizan. Para ello es necesario analizar la varianza explicada acumulada.
Se muestra gráficamente cómo varía la varianza explicada acumulada:
# Cálculo de la varianza explicada acumulada
prop_varianza = df_pca_imp_0$sdev^2/sum(df_pca_imp_0$sdev^2)
prop_varianza_acum = cumsum(prop_varianza)
# Se muestra mediante gráfica cómo varía la varianza explicada acumulada
ggplot(data = data.frame(prop_varianza_acum, pc = factor(1:ncol(rto_fin_abandono_esc))),
aes(x = pc, y = prop_varianza_acum, group = 1)) +
geom_point() +
geom_line() +
geom_label(aes(label = round(prop_varianza_acum, 2)), angle = 45, size=2) +
theme_bw() +
labs(x = "Componentes principales",
y = "Prop. varianza explicada acumulada") +
theme(axis.text.x = element_text(angle = 90, vjust = 1, hjust=1, size=8))
Aproximadamente, el 85% de la varianza acumulada se obtiene con el PC33.
prop_varianza_acum[33]
## [1] 0.8529156
Se muestra la proporción de varianza explicada y acumulada de las variables:
summary(df_pca_imp_0)$importance
## PC1 PC2 PC3 PC4 PC5 PC6
## Standard deviation 2.723356 2.173923 2.122774 1.79657 1.725447 1.532755
## Proportion of Variance 0.109070 0.069500 0.066270 0.04747 0.043780 0.034550
## Cumulative Proportion 0.109070 0.178570 0.244840 0.29230 0.336080 0.370630
## PC7 PC8 PC9 PC10 PC11 PC12
## Standard deviation 1.489567 1.450294 1.334021 1.284519 1.258029 1.227143
## Proportion of Variance 0.032630 0.030930 0.026170 0.024260 0.023270 0.022150
## Cumulative Proportion 0.403260 0.434190 0.460360 0.484630 0.507900 0.530050
## PC13 PC14 PC15 PC16 PC17 PC18
## Standard deviation 1.193625 1.17299 1.166936 1.145293 1.140787 1.082779
## Proportion of Variance 0.020950 0.02023 0.020030 0.019290 0.019140 0.017240
## Cumulative Proportion 0.551000 0.57123 0.591260 0.610550 0.629690 0.646930
## PC19 PC20 PC21 PC22 PC23 PC24
## Standard deviation 1.077412 1.039783 1.028319 1.022973 1.001629 0.9970835
## Proportion of Variance 0.017070 0.015900 0.015550 0.015390 0.014750 0.0146200
## Cumulative Proportion 0.664000 0.679900 0.695450 0.710840 0.725590 0.7402100
## PC25 PC26 PC27 PC28 PC29
## Standard deviation 0.9884982 0.9712716 0.9501853 0.9380098 0.9171278
## Proportion of Variance 0.0143700 0.0138700 0.0132800 0.0129400 0.0123700
## Cumulative Proportion 0.7545800 0.7684500 0.7817300 0.7946700 0.8070400
## PC30 PC31 PC32 PC33 PC34
## Standard deviation 0.9047291 0.886985 0.8767462 0.8634407 0.8582044
## Proportion of Variance 0.0120400 0.011570 0.0113000 0.0109600 0.0108300
## Cumulative Proportion 0.8190800 0.830650 0.8419500 0.8529200 0.8637500
## PC35 PC36 PC37 PC38 PC39
## Standard deviation 0.8451119 0.8426052 0.8028345 0.7892522 0.778689
## Proportion of Variance 0.0105000 0.0104400 0.0094800 0.0091600 0.008920
## Cumulative Proportion 0.8742500 0.8846900 0.8941700 0.9033300 0.912250
## PC40 PC41 PC42 PC43 PC44
## Standard deviation 0.7588257 0.7334881 0.7186603 0.6813001 0.6532749
## Proportion of Variance 0.0084700 0.0079100 0.0076000 0.0068300 0.0062800
## Cumulative Proportion 0.9207100 0.9286300 0.9362200 0.9430500 0.9493200
## PC45 PC46 PC47 PC48 PC49
## Standard deviation 0.6277076 0.6094155 0.5995588 0.57679 0.5527973
## Proportion of Variance 0.0057900 0.0054600 0.0052900 0.00489 0.0044900
## Cumulative Proportion 0.9551200 0.9605800 0.9658700 0.97076 0.9752500
## PC50 PC51 PC52 PC53 PC54
## Standard deviation 0.4941943 0.4679084 0.4496377 0.4477744 0.4431466
## Proportion of Variance 0.0035900 0.0032200 0.0029700 0.0029500 0.0028900
## Cumulative Proportion 0.9788400 0.9820600 0.9850400 0.9879900 0.9908700
## PC55 PC56 PC57 PC58 PC59
## Standard deviation 0.4036481 0.3903443 0.2937787 0.276726 0.2686125
## Proportion of Variance 0.0024000 0.0022400 0.0012700 0.001130 0.0010600
## Cumulative Proportion 0.9932700 0.9955100 0.9967800 0.997910 0.9989700
## PC60 PC61 PC62 PC63 PC64
## Standard deviation 0.1989785 0.1693615 0.03302534 0.03015249 2.68663e-06
## Proportion of Variance 0.0005800 0.0004200 0.00002000 0.00001000 0.00000e+00
## Cumulative Proportion 0.9995500 0.9999700 0.99999000 1.00000000 1.00000e+00
## PC65 PC66 PC67 PC68
## Standard deviation 1.209413e-15 4.754185e-16 2.867507e-16 2.164675e-16
## Proportion of Variance 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
## Cumulative Proportion 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00
¿Cómo elegir el número óptimo de componentes principales?
Mediante la función fviz_screeplot() del paquete factoextra se genera un scree plot que muestra los eigenvalores (de mayor a menor). De esta forma obtenemos un total de 10 dimensiones, es decir, las 68 variables a analizar se han agrupado en 10 dimensiones de modo que para cada agrupación la variación de las varianzas está optimizada.
# se añade gráfico comparado
layout(matrix(c(1, 2), ncol = 2))
# Se grafica
fviz_screeplot(df_pca_imp_0,
addlabels = TRUE,
ylim = c(0, 33)) +
labs(title = "Scree plot")
Mediante la función fviz_pca_var() del paquete factoextra se genera un gráfico que muestra la contribución de las 35 variables PCA principales.
# se añade gráfico comparado
layout(matrix(c(1, 2), ncol = 2))
fviz_pca_var(
df_pca_imp_0,
axes = c(1, 2),
repel = FALSE,
col.var = "black",
fill.var = "white",
alpha.var = 1,
select.var = list(name = NULL, cos2 = NULL, contrib = 33) # se limita al top33
) +
labs(title = "Variables PCA")
Se muestran para las 2 dimensiones principales las variables que están por encima de la media (línea roja discontinua que representa el valor medio de contribución de las variables a la dimensión).
# Se grafica PC1
fviz_contrib(df_pca_imp_0,
choice = "var",
axes = 1,
top = 20) + #si se quiere aplicar top o limitar las variables por encima de la media, personalizando
theme(axis.text.x = element_text(angle = 90))
# Se grafica PC2
fviz_contrib(df_pca_imp_0,
choice = "var",
axes = 2,
top = 20) +
theme(axis.text.x = element_text(angle = 90))
El juego de datos se reduce a las variables que se encuentran por encima de la media en las dos primeras dimensiones:
Quedando compuesto de las siguientes variables:
| Variable | Descripción | Valores | Tipo | Explotación |
|---|---|---|---|---|
| ste_codalf | Tipo de estudios | 0: Grado, 1: Máster | Cardinal | Sí |
| titulado | Titulación finalizada | >=0 | Cardinal | Sí |
| tasa_eficiencia | 100*ECTS superados/matriculados | >=0 | Cardinal | Sí |
| t_exito | 100*ECTS superados/presentados | >=0 | Cardinal | Sí |
| t_evaluacion | 100*ECTS presentados/matriculados | >=0 | Cardinal | Sí |
| t_rec | 100*ECTS reconocidos/total a superar | >=0 | Cardinal | Sí |
| t_sup_req | 100*ECTS (superados+reconocidos)/total a superar | >=0 | Cardinal | Sí |
| acceso | Tipo acceso presentado | 1: Titulado Universitario, 0: No | Cardinal | Sí |
| n_nodos_fin_titulacion | Nº de nodos de finalización (si >1, distintas especialidades) | >=0 | Cardinal | Sí |
| tasa_abandono | 0: si se titula, no se traslada y tiene matrícula activa en dos últimos cursos; 1: en el resto de casos | 1: Sí, 0: No | Cardinal | Sí |
| nota_media | Media ponderada ECTS superados en Udima | >=0 | Cardinal | Sí |
| sa_asig_R | Representatividad de la muestra | 1: “Sí”, 0: “No” | Cardinal | Sí |
| sa_asig_participacion | Proporción de encuestas respondidas por el estudiante en las asignaturas del plan respecto de las que han sido enviadas | entre 0 y 1 | Cardinal | Sí |
| sa_asig_organizacion | Promedio de valoraciones aportadas por el estudiante en las asignaturas para el ítem La organización de la asignatura facilita el aprendizaje de esta asignatura. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_asig_manual | Promedio de valoraciones aportadas por el estudiante en las asignaturas para el ítem El manual facilita el aprendizaje de esta asignatura | >=1 y <= 5 | Cardinal | Sí |
| sa_asig_materiales | Promedio de valoraciones aportadas por el estudiante en las asignaturas para el ítem Otros materiales didácticos aportados facilitan el aprendizaje de esta asignatura | >=1 y <= 5 | Cardinal | Sí |
| sa_asig_actividades | Promedio de valoraciones aportadas por el estudiante en las asignaturas para el ítem Las actividades didácticas planteadas facilitan el aprendizaje de esta asignatura | >=1 y <= 5 | Cardinal | Sí |
| sa_asig_docente | Promedio de valoraciones aportadas por el estudiante en las asignaturas para el ítem La labor del docente facilita el aprendizaje de esta asignatura | >=1 y <= 5 | Cardinal | Sí |
| sa_asig_aprendiendo | Porcentaje de respuestas Sí al ítem ¿Consideras que estás aprendiendo? respecto de las encuestas respondidas por el estudiante en las asignaturas | entre 0 y 1 | Cardinal | Sí |
| sa_curso_R | Representatividad de la muestra | 1: “Sí”, 0: “No” | Cardinal | Sí |
| sa_curso_participacion | Proporción de encuestas respondidas por el estudiante en los cursos matriculados en el plan respecto de las que han sido enviadas | entre 0 y 1 | Cardinal | Sí |
| sa_curso_titulacion | Promedio de valoraciones aportadas por el estudiante en los cursos matriculados en el plan para el ítem ‘Grado de satisfacción general con la titulación’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_titulacion_R | Representatividad de la muestra | 1: “Sí”, 0: “No” | Cardinal | Sí |
| sa_titulacion_participacion | Proporción de encuestas respondidas por el egresado en los cursos de egreso en el plan respecto de las que han sido enviadas | entre 0 y 1 | Cardinal | Sí |
| sa_titulacion_implicacion | Promedio de valoraciones aportadas por el estudiante en los cursos egresados en el plan para el ítem ‘Mi implicación con los estudios’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| il_R | Representatividad de la muestra | 1: “Sí”, 0: “No” | Cardinal | Sí |
| il_participacion | Proporción de encuestas respondidas por el egresado en los cursos de egreso y estudios en el plan respecto de las que han sido enviadas (estudios tipo I y II, realizados respectivamente, al año y dos años de egresar) | entre 0 y 1 | Cardinal | Sí |
| il_consecuencia_estudios | Valoración aportada por el egresado en los estudios tipo I y II en el plan para el ítem ¿Qué ha supuesto la realización de los estudios? | 1: Conseguir o mejorar un empleo; 0: No variación u Otro | Cardinal | Sí |
Nota: t_rec y t_sup_req pueden superar el 100% ya que están calculadas frentes a los ECTS requeridos para finalizar la titulación, pero pueden superarse más ECTS de los requeridos (optativas, menciones, especialidades).
Representatividad de la muestra (determina si la muestra es estadísticamente significativa): Dado que las respuestas recibidas responden a un muestreo se determina la obtención de muestra representativa mediante la fórmula:
\[Muestra\ representativa\ (n)\ = \frac{\frac{z^{2}\ p\ (1-p)\ }{e^{2}}}{1 + \frac{z^{2}\ p\ (1-p)\ }{e^{2} N\ }}\]
Siendo:
Nivel de confianza (NC) del 80%, lo que implica Z-score (z) de 1.282.
Proporción esperada (p): para maximizar el tamaño muestral será de 0.5 (50%).
Error muestral (e) del 10%.
Población (N): cantidad total de usuarios a los que se invita a participar en el estudio.
variables_svd = c("ste_codalf", "acceso", "t_sup_req", "t_rec", "nota_media",
"tasa_abandono", "titulado", "n_nodos_fin_titulacion", "duracion_media_estudios",
"tasa_eficiencia", "t_exito", "t_evaluacion", "edad_inicio",
"sa_asig_R", "sa_asig_participacion",
"sa_asig_actividades", "sa_asig_organizacion", "sa_asig_manual",
"sa_asig_materiales", "sa_asig_docente", "sa_asig_aprendiendo",
"sa_curso_R", "sa_curso_participacion", "sa_curso_titulacion",
"sa_titulacion_R", "sa_titulacion_participacion", "sa_titulacion_implicacion",
"il_R", "il_participacion", "il_consecuencia_estudios",
"il_motivo_estudios", "il_trabajo_actual", "il_trabajo_actual_relacionado_estudios")
rto_total_red = data_dummy_esc %>%
select(variables_svd)
# se filtran los datos de titulados
rto_fin_red = rto_total_red %>%
filter(titulado > min(titulado))
# se filtran los datos de no titulados
rto_no_fin_red = rto_total_red %>%
filter(titulado == min(titulado))
# se filtran los datos de abandonos
rto_abandono_red = rto_no_fin_red %>%
filter(tasa_abandono == max(tasa_abandono))
# se obtiene juego de datos de titulados y abandono (fusión)
rto_fin_abandono_red = rbind(rto_fin_red,
rto_abandono_red)
# se filtran los datos en progreso
rto_progreso_red = rto_no_fin_red %>%
filter(tasa_abandono == min(tasa_abandono))
En esta fase, el objetivo es modelar las técnicas que son necesarias para resolver el objetivo principal del proyecto (mediante los objetivos específicos).
Como ya se anunció en la Fase I del proyecto, el objetivo del mismo se puede resolver mediante minería de datos a través del establecimiento de los siguientes objetivos específicos:
Identificar los perfiles del estudiantado universitario de Grado o Máster de la Udima que finaliza o abandona sus estudios. Esto se realizará mediante la clasificación de los individuos en grupos homogéneos mediante técnicas de aprendizaje no supervisadas para conocer la similitud entre los mismos y la clasificación, que es desconocida a priori. Para ello, se aplicarán métodos de agregación o análisis cluster.
Determinar las características principales de los perfiles del estudiantado. Para ello, se aplicarán estadísticas básicas.
Predecir la clasificación de los estudiantes que no han finalizado los estudios en base a sus resultados parciales de rendimiento académico, opiniones manifestadas, características sociodemográficas y de comportamiento en el LMS utilizado. Para ello se aplicarán técnicas de aprendizaje supervisado: clasificación.
Para identificar los perfiles del estudiantado que finaliza o abandona sus estudios se va a clasificar a los individuos en grupos homogéneos mediante técnicas multivariantes exploratorias, obteniendo la similitud entre los mismos y la clasificación, que es desconocida a priori. Para ello, se aplicarán métodos de agregación o análisis cluster (métodos no supervisados basados en el concepto de distancia).
Los métodos de agrupación permiten explorar los datos para encontrar similitudes. Se parte de un caso en el que el número de agrupaciones (o clusters) es desconocido, por lo que, es necesario determinar la métrica y el algoritmo de agrupamiento a aplicar.
Como uno de los algoritmos a evaluar será k-means, que está basado en distancias, es necesario:
no contar con registros que contengan datos ausentes. Los datos ausentes han sido sustituidos por 0 o por la mediana, según el caso. Esta condición ha sido previamente aplicada en el juego de datos.
contar con las variables numéricas normalizadas para que todas las variables aportan la misma importancia en el cálculo de los centroides. Esta condición ha sido previamente aplicada en el juego de datos.
Mediante la función clValid del paquete clValid se evalúan distintas métricas y métodos para conocer el algoritmo y número óptimo de clusters.
El método con la mínima conectividad y máximos índices dunn y ancho de la silueta determina la combinación óptima: esto sucede con el algoritmo k-means, distancia euclidiana y 2 clusters.
Las medidas de validación de este método superan a las de otros algoritmos de agrupación para casi todas las agrupaciones evaluadas (2 a 5), siendo óptimo k=2.
# https://stackoverflow.com/questions/54785297/configuring-mkl-with-r
# se evalúan las distintas métricas y métodos para conocer el número óptimo de clusters
# t1 = Sys.time()
# gc()
eval_cluster = clValid(rto_fin_abandono_red,
nClust = 2:5,
clMethods = c("kmeans", "pam"),
validation = "internal",
maxitems = nrow(rto_fin_abandono_red),
verbose = TRUE)
# t2 = Sys.time()
# total = t2 - t1
# se muestran resultados
summary(eval_cluster)
# print(paste0('Tiempo de ejecución: ', total))
Comparación kmeans y pam de 2 a 5 clusters
A continuación se van a explorar distintos métodos para determinar el número de clusters a aplicar.
Este método consiste en determinar las agrupaciones óptimas obtenidas cuando la anchura de la silueta promedio tiene el mayor valor.
Mediante la función fviz_nbclust de la librería factoextra, similar al método elbow (del codo), se calcula el “método de silueta promedio” obteniendo que el número óptimo de clusters es 2. Esto viene determinado por el valor máximo del promedio de silueta promedio, no obstante, esto sería una agrupación poco rica en detalles, ya que definiría a los estudiantes que egresan y a los que abandonan. Por este motivo, se descarta agrupar en 2 clusters y se decide agrupar en el siguiente nivel máximo: se decide agrupar en 4 clusters.
# se define set.seed(n) para forzar a que los valores de la muestra aleatoria sean los mismos siempre
set.seed(1234)
# Se representa en una gráfica fviz_nbclust los valores de las siluetas media de cada prueba realizada para determinar el número óptimo de clusters.
fviz_nbclust(rto_fin_abandono_red,
kmeans,
method = "silhouette",
k.max = 5) +
labs(subtitle = "Método de la silueta promedio")
Este método selecciona el número de clusters en función de la menor suma de los cuadrados de las distancias de los puntos de cada grupo con respecto a su centro (withinss), con la mayor separación entre centros de grupos (betweenss).
Al graficarlo, el número de clusters óptimo se encuentra en el “codo” de la curva. Se realiza la prueba con hasta 10 clusters y se determina que el número óptimo de clusters es 4.
# Se representa en una gráfica los valores de las distancias de cada prueba realizada para determinar el número óptimo de clusters.
fviz_nbclust(rto_fin_abandono_red,
kmeans,
method = "wss",
k.max = 10) +
labs(subtitle = "Método elbow (el Codo)")
# Forma alternativa de obtener el gráfico de sedimentación (gráfico de codo)
wss = (nrow(rto_fin_abandono_red)-1)*sum(apply(rto_fin_abandono_red, 2, var))
# se obtienen los centros
for (i in 2:10) wss[i] = sum(kmeans(rto_fin_abandono_red,
centers = i)$withinss)
# Se representa
ggplot() + geom_point(aes(x = 1:10, y = wss), color = 'blue') +
geom_line(aes(x = 1:10, y = wss), color = 'blue') +
ggtitle("Método elbow (el Codo)") +
xlab('Número de clusters') +
ylab('Variabilidad dentro del grupo')
Se comprueba la calidad del agrupamiento con 2 y 4 clusters clusters y se fuerza al algoritmo a elegir 100 conjuntos de centros de inicio aleatorios (indicando ‘nstart = 100’).
Se comprueba la calidad del agrupamiento con 2 clusters:
# se define set.seed(n) para forzar a que los valores de la muestra aleatoria sean los mismos siempre
set.seed(1234)
# Se aplica el algoritmo kmeans con 2 clusters
fit2 = kmeans(rto_fin_abandono_red, 2, nstart = 100)
# Se crea una variable que contiene para cada muestra el identificador del *cluster* a las que han sido asignadas, es decir, las muestras que han asignadas al cluster 1 y 2
y_cluster2 = fit2$cluster
# Se visualizan los clusters mediante la función clusplot.
clusplot(rto_fin_abandono_red,
fit2$cluster,
color = TRUE,
shade = TRUE,
labels = 6,
lines = 1)
# sin variables dummy para indicar el valor original categórico
rto_fin_abandono_k2 = rto_fin_abandono
# se añade la clasificación a la bbdd
rto_fin_abandono_k2$cluster = y_cluster2
# se obtienen las distintas bases de datos asociadas a cada perfil
perfil_1_k2 = rto_fin_abandono_k2 %>% filter(cluster == 1)
perfil_2_k2 = rto_fin_abandono_k2 %>% filter(cluster == 2)
Se muestra la distribución por tipo de perfil en la clasificación de estudiantes en 2 clusters:
# se grafican los boxplot
par(mfrow = c(1, 2))
# ste_codalf
boxplot(ste_codalf ~ cluster,
data = rto_fin_abandono_k2,
main = "Tipo de estudios: 0, Grado; 1, Máster")
# se añade valor medio
abline(h = mean(rto_fin_abandono_k2$ste_codalf, na.rm = TRUE),
col = "red", lty = 2)
# titulado
boxplot(titulado ~ cluster,
data = rto_fin_abandono_k2,
main = "Titulado: 0, No")
# se añade valor medio
abline(h = mean(rto_fin_abandono_k2$titulado, na.rm = TRUE),
col = "red", lty = 2)
# se grafican los boxplot
par(mfrow = c(1, 3))
# tasa_eficiencia
boxplot(tasa_eficiencia ~ cluster,
data = rto_fin_abandono_k2,
main = "Tasa de eficiencia")
# se añade valor medio
abline(h = mean(rto_fin_abandono_k2$tasa_eficiencia, na.rm = TRUE),
col = "red", lty = 2)
# t_exito
boxplot(t_exito ~ cluster,
data = rto_fin_abandono_k2,
main = "Tasa de éxito")
# se añade valor medio
abline(h = mean(rto_fin_abandono_k2$t_exito, na.rm = TRUE),
col = "red", lty = 2)
# t_evaluacion
boxplot(t_evaluacion ~ cluster,
data = rto_fin_abandono_k2,
main = "Tasa de evaluación")
# se añade valor medio
abline(h = mean(rto_fin_abandono_k2$t_evaluacion, na.rm = TRUE),
col = "red", lty = 2)
# Mediante la función silhouette que evalúa la calidad del proceso de agregación
df_similitud = daisy(rto_fin_abandono_red)
calidad_cluster2 = silhouette(y_cluster2,
df_similitud)
# La función silhouette devuelve para cada muestra, el cluster dónde ha sido asignado, el cluster vecino y el valor de la silueta. Por lo tanto, calculando la media de la tercera columna podemos obtener una estimación de la calidad del agrupamiento
v_calidad_cluster2 = mean(calidad_cluster2[, 'sil_width'])
De nuevo, se comprueba la calidad del agrupamiento, esta vez con 4 clusters:
# se define set.seed(n) para forzar a que los valores de la muestra aleatoria sean los mismos siempre
set.seed(1234)
# Se aplica el algoritmo kmeans con 4 clusters y se fuerza al algoritmo a elegir 100 conjuntos de centros de inicio aleatorios
fit4 = kmeans(rto_fin_abandono_red, 4, nstart = 100)
# Se crea una variable que contiene para cada muestra el identificador del cluster a las que han sido asignadas, es decir, las muestras que han asignadas al cluster 1, 2, 3 y 4
y_cluster4 = as.factor(fit4$cluster)
# Se visualizan los clusters mediante la función clusplot.
clusplot(rto_fin_abandono_red,
fit4$cluster,
color = TRUE,
shade = TRUE,
labels = 6,
lines = 1)
# se muestran los resultados del algoritmo
# fit4
# Mediante la función silhouette que evalúa la calidad del proceso de agregación
calidad_cluster4 = silhouette(as.numeric(y_cluster4),
df_similitud)
# La función silhouette devuelve para cada muestra, el cluster dónde ha sido asignado, el cluster vecino y el valor de la silueta. Por lo tanto, calculando la media de la tercera columna podemos obtener una estimación de la calidad del agrupamiento
v_calidad_cluster4 = mean(calidad_cluster4[, 'sil_width'])
La estimación de la calidad del agrupamiento del método de 2 cluster es 0.4768182 mientras que la de 4 es 0.3251001.
De esta forma, la clasificación óptima sería:
# representación
fviz_cluster(fit4, data = rto_fin_abandono_red)
Pese a que la estimación de la calidad del agrupamiento del método de 2 cluster (0.4768182), que es mayor que la de 4 (0.3251001), y que la función clValid determina que los resultados óptimos se obtienen con el algoritmo k-means, métrica: distancia euclidiana y 2 clusters, se descarta agrupar en 2 clusters y se decide agrupar en el siguiente nivel máximo: 4 clusters, con el algoritmo k-means y métrica: distancia euclidiana como sugiere el método elbow (el codo), el método de la silueta promedio (mediante la función fviz_nbclust).
Se obtienen las siguientes conclusiones:
La mayor fiabilidad del proceso se obtiene aplicando un juego de datos normalizado mediante la función scale para que las variables tengan media 0 y desviación típica 1 para poder aplicar el algoritmo k-means que está basado en distancias. De esta forma, todas las variables aportan la misma importancia en el cálculo de los centroides. Para poder agrupar los datos, es necesario no tener datos ausentes.
Para avanzar en esta tarea se puede hacer uso de la función NbClust que analiza mediante distintos métodos y medidas cuál es el número óptimo de clusters. Se puede personalizar la función para indicar (o no) el número mínimo y máximo de clusters; o por el contrario, no limitarlo y que evalúe todas las opciones.
Determinar el algoritmo, la métrica y el número óptimo de clusters no es trivial y su evaluación requiere de ala capacidad computacional. Los resultados que ofrece el método elbow (el codo) se consideran óptimo ya que selecciona el número de clusters en función de la menor suma de los cuadrados de las distancias de los puntos de cada grupo con respecto a su centro (withinss), con la mayor separación entre centros de grupos (betweenss). Al graficarlo, el número de clusters óptimo se encuentra en el “codo” de la curva.
Otro aspecto a valorar es la calidad del proceso de agregación. A mayor valor, mayor calidad. Mediante este análisis se concluye que el criterio de agrupación con mayor calidad es 4 clusters en lugar del de 2.
Por último, en el caso del ejemplo concreto, ha quedado de manifiesto que la agrupación en 4 clusters es la más fiable si no partimos de una preclasificación determinada (0.3251001) y según el problema planteado.
Partiendo de la clasificación en 4 clusters, con el algoritmo k-means y métrica distancia euclidiana se obtienen las distintas bases de datos así como sus características principales:
# se crea bbdd reducida con clasificación y valores orifinales
rto_fin_abandono_clas = rto_fin_abandono %>%
select(variables_svd)
# se añade la clasificación a la bbdd
rto_fin_abandono_clas$cluster = y_cluster4
# se obtienen las distintas bases de datos asociadas a cada perfil
perfil_1 = rto_fin_abandono_clas %>% filter(cluster == 1)
perfil_2 = rto_fin_abandono_clas %>% filter(cluster == 2)
perfil_3 = rto_fin_abandono_clas %>% filter(cluster == 3)
perfil_4 = rto_fin_abandono_clas %>% filter(cluster == 4)
# salida para memoria
# se define función para tener mostrar comparación de resultados
comparacion_item = function(x){
resultados = c(paste0(#'Mean (sd): ',
round(mean(perfil_1[[x]], na.rm=TRUE), 1),
' (', round(sd(perfil_1[[x]], na.rm=TRUE), 1),')'),
paste0(#'Mean (sd): ',
round(mean(perfil_2[[x]], na.rm=TRUE), 1),
' (', round(sd(perfil_2[[x]], na.rm=TRUE), 1),')'),
paste0(#'Mean (sd): ',
round(mean(perfil_3[[x]], na.rm=TRUE), 1),
' (', round(sd(perfil_3[[x]], na.rm=TRUE), 1),')'),
paste0(#'Mean (sd): ',
round(mean(perfil_4[[x]], na.rm=TRUE), 1),
' (', round(sd(perfil_4[[x]], na.rm=TRUE), 1),')')
)
return(resultados)
}
# Comparación clasificación-predicción
comparacion = data.frame(
perfil = c('dropout',
'common_graduate',
'motivated',
'dissatisfied'),
"proporción" = c(paste0(nrow(perfil_1),
" (", round(100*nrow(perfil_1)/nrow(rto_fin_abandono), 2), "%)"),
paste0(nrow(perfil_2),
" (", round(100*nrow(perfil_2)/nrow(rto_fin_abandono), 2), "%)"),
paste0(nrow(perfil_3),
" (", round(100*nrow(perfil_3)/nrow(rto_fin_abandono), 2), "%)"),
paste0(nrow(perfil_4),
" (", round(100*nrow(perfil_4)/nrow(rto_fin_abandono), 2), "%)")
),
'edad_inicio' = comparacion_item('edad_inicio'),
'titulado' = comparacion_item('titulado'),
'n_especialidades' = comparacion_item('n_nodos_fin_titulacion'),
't_sup_req' = comparacion_item('t_sup_req'),
't_rec' = comparacion_item('t_rec'),
'nota_media' = comparacion_item('nota_media'),
'tasa_eficiencia' = comparacion_item('tasa_eficiencia'),
't_exito' = comparacion_item('t_exito'),
't_evaluacion' = comparacion_item('t_evaluacion'),
'sa_asig_participacion' = comparacion_item('sa_asig_participacion'),
'sa_asig_docente' = comparacion_item('sa_asig_docente'),
'sa_asig_aprendiendo' = comparacion_item('sa_asig_aprendiendo'),
'sa_curso_participacion' = comparacion_item('sa_curso_participacion'),
'sa_curso_titulacion' = comparacion_item('sa_curso_titulacion'),
'sa_titulacion_participacion' = comparacion_item('sa_titulacion_participacion'),
'sa_titulacion_implicacion' = comparacion_item('sa_titulacion_implicacion'),
'il_participacion' = comparacion_item('il_participacion'),
'il_trabajo_actual_relacionado_estudios' = comparacion_item('il_trabajo_actual_relacionado_estudios')
)
comparacion_t = data.frame(t(comparacion[-1]))
# Añadimos los nombres de las columnas
colnames(comparacion_t) = comparacion[, 1]
# se exportan resultados a latex
print(xtable(comparacion_t), include.rownames = TRUE)
Se muestra la distribución por tipo de perfil en las 10 primeras variables con mayor varianza explicada y acumulada identificadas mediante el estudio SVD.
# se grafican los boxplot
par(mfrow = c(1, 3))
# ste_codalf
boxplot(ste_codalf ~ cluster,
data = rto_fin_abandono_clas,
main = "Tipo de estudios: 0, Grado; 1, Máster")
# se añade valor medio
abline(h = mean(rto_fin_abandono_clas$ste_codalf, na.rm = TRUE),
col = "red", lty = 2)
# titulado
boxplot(titulado ~ cluster,
data = rto_fin_abandono_clas,
main = "Titulado: 0, No")
# se añade valor medio
abline(h = mean(rto_fin_abandono_clas$titulado, na.rm = TRUE),
col = "red", lty = 2)
# duracion_media_estudios
boxplot(duracion_media_estudios ~ cluster,
data = rto_fin_abandono_clas,
main = "Titulado: 0, No")
# se añade valor medio
abline(h = mean(rto_fin_abandono_clas$duracion_media_estudios, na.rm = TRUE),
col = "red", lty = 2)
# se grafican los boxplot
par(mfrow = c(1, 3))
# tasa_eficiencia
boxplot(tasa_eficiencia ~ cluster,
data = rto_fin_abandono_clas,
main = "Tasa de eficiencia")
# se añade valor medio
abline(h = mean(rto_fin_abandono_clas$tasa_eficiencia, na.rm = TRUE),
col = "red", lty = 2)
# t_exito
boxplot(t_exito ~ cluster,
data = rto_fin_abandono_clas,
main = "Tasa de éxito")
# se añade valor medio
abline(h = mean(rto_fin_abandono_clas$t_exito, na.rm = TRUE),
col = "red", lty = 2)
# t_evaluacion
boxplot(t_evaluacion ~ cluster,
data = rto_fin_abandono_clas,
main = "Tasa de evaluación")
# se añade valor medio
abline(h = mean(rto_fin_abandono_clas$t_evaluacion, na.rm = TRUE),
col = "red", lty = 2)
# se grafican los boxplot
par(mfrow = c(1, 2))
# t_rec
boxplot(t_rec ~ cluster,
data = rto_fin_abandono_clas,
main = "% ECTS reconocidos")
# se añade valor medio
abline(h = mean(rto_fin_abandono_clas$t_rec, na.rm = TRUE),
col = "red", lty = 2)
# t_sup_req
boxplot(t_sup_req ~ cluster,
data = rto_fin_abandono_clas,
main = "% ECTS superados o reconocidos")
# se añade valor medio
abline(h = mean(rto_fin_abandono_clas$t_sup_req, na.rm = TRUE),
col = "red", lty = 2)
Se muestra la distribución de otras variables características del estudiantado:
# se grafican los boxplot
par(mfrow = c(1, 2))
# acceso
boxplot(acceso ~ cluster,
data = rto_fin_abandono_clas,
main = "Tipo de acceso: 1, Título universitario")
# se añade valor medio
abline(h = mean(rto_fin_abandono_clas$acceso, na.rm = TRUE),
col = "red", lty = 2)
# nota_media
boxplot(nota_media ~ cluster,
data = rto_fin_abandono_clas,
main = "Nota media")
# se añade valor medio
abline(h = mean(rto_fin_abandono_clas$nota_media, na.rm = TRUE),
col = "red", lty = 2)
También se muestra la distribución de participación en las encuestas:
# se grafican los boxplot
par(mfrow = c(1, 4))
# sa_asig_participacion
boxplot(sa_asig_participacion ~ cluster,
data = rto_fin_abandono_clas,
main = "% encuestas asignaturas")
# se añade valor medio
abline(h = mean(rto_fin_abandono_clas$sa_asig_participacion, na.rm = TRUE),
col = "red", lty = 2)
# sa_curso_participacion
boxplot(sa_curso_participacion ~ cluster,
data = rto_fin_abandono_clas,
main = "% encuestas curso")
# se añade valor medio
abline(h = mean(rto_fin_abandono_clas$sa_curso_participacion, na.rm = TRUE),
col = "red", lty = 2)
# sa_titulacion_participacion
boxplot(sa_titulacion_participacion ~ cluster,
data = rto_fin_abandono_clas,
main = "% encuestas titulación")
# se añade valor medio
abline(h = mean(rto_fin_abandono_clas$sa_titulacion_participacion, na.rm = TRUE),
col = "red", lty = 2)
# il_participacion
boxplot(il_participacion ~ cluster,
data = rto_fin_abandono_clas,
main = "% estudio inserción laboral")
# se añade valor medio
abline(h = mean(rto_fin_abandono_clas$il_participacion, na.rm = TRUE),
col = "red", lty = 2)
El 25.09% del estudiantado analizado pertenece a esta categoría. Se caracteriza por:
egresar en 0 especialidad/es en una media de 1.67 años;
con tasas de rendimiento (eficiencia, éxito y evaluación) superiores al 41%;
superar, frente a los ECTS requeridos para obtener la titulación, una media del 24.15% (se superan más ECTS de los requeridos, pudiendo obtener distintas especialidades o superar asignaturas optativas adicionales) y reconocer un 3.92% de los requeridos;
obtener una nota media de 7.56;
participación en las encuestas del (asignaturas (10.55%), curso (3.74%), 0% en inserción laboral y 0% en titulación) y satisfacción media en asignaturas manifestada de 4.27.
A continuación se muestra el detalle la información descriptiva del perfil del estudiantado, incluyendo gráficos para cada variable, las frecuencias para cada valor y las etiquetas de las variables.
# https://cran.r-project.org/web/packages/summarytools/vignettes/rmarkdown.html#using-dfsummary-in-r-markdown
# se visualiza
dfSummary(perfil_1,
plain.ascii = FALSE,
style = 'grid',
graph.magnif = 0.85,
varnumbers = FALSE,
valid.col = FALSE,
tmp.img.dir = "/tmp")
Dimensions: 7747 x 34
Duplicates: 1602
| Variable | Stats / Values | Freqs (% of Valid) | Graph | Missing |
|---|---|---|---|---|
| ste_codalf [numeric] |
Min : 0 Mean : 0.3 Max : 1 |
0 : 5161 (66.6%) 1 : 2586 (33.4%) |
0 (0.0%) |
|
| acceso [numeric] |
Min : 0 Mean : 0.5 Max : 1 |
0 : 3734 (48.2%) 1 : 4013 (51.8%) |
0 (0.0%) |
|
| t_sup_req [numeric] |
Mean (sd) : 24.1 (30.4) min < med < max: 0 < 10 < 125 IQR (CV) : 37.5 (1.3) |
211 distinct values | 0 (0.0%) |
|
| t_rec [numeric] |
Mean (sd) : 3.9 (10.5) min < med < max: 0 < 0 < 86.7 IQR (CV) : 0 (2.7) |
105 distinct values | 0 (0.0%) |
|
| nota_media [numeric] |
Mean (sd) : 7.6 (0.9) min < med < max: 2.1 < 7.9 < 10 IQR (CV) : 0.9 (0.1) |
2090 distinct values | 0 (0.0%) |
|
| tasa_abandono [numeric] |
1 distinct value | 1 : 7747 (100.0%) | 0 (0.0%) |
|
| titulado [numeric] |
1 distinct value | 0 : 7747 (100.0%) | 0 (0.0%) |
|
| n_nodos_fin_titulacion [numeric] |
1 distinct value | 0 : 7747 (100.0%) | 0 (0.0%) |
|
| duracion_media_estudios [numeric] |
Mean (sd) : 1.7 (1.1) min < med < max: 1 < 1 < 10 IQR (CV) : 1 (0.6) |
1 : 4528 (58.4%) 2 : 2104 (27.2%) 3 : 640 ( 8.3%) 4 : 264 ( 3.4%) 5 : 116 ( 1.5%) 6 : 50 ( 0.6%) 7 : 26 ( 0.3%) 8 : 8 ( 0.1%) 9 : 7 ( 0.1%) 10 : 4 ( 0.1%) |
0 (0.0%) |
|
| tasa_eficiencia [numeric] |
Mean (sd) : 41.4 (37.5) min < med < max: 0 < 35.5 < 100 IQR (CV) : 76.2 (0.9) |
724 distinct values | 0 (0.0%) |
|
| t_exito [numeric] |
Mean (sd) : 58.5 (43.5) min < med < max: 0 < 76.9 < 100 IQR (CV) : 100 (0.7) |
437 distinct values | 0 (0.0%) |
|
| t_evaluacion [numeric] |
Mean (sd) : 50.6 (38.2) min < med < max: 0 < 51.9 < 100 IQR (CV) : 84.4 (0.8) |
718 distinct values | 0 (0.0%) |
|
| edad_inicio [numeric] |
Mean (sd) : 32.6 (9.2) min < med < max: 17 < 31 < 78 IQR (CV) : 13 (0.3) |
58 distinct values | 0 (0.0%) |
|
| sa_asig_R [numeric] |
Min : 0 Mean : 0 Max : 1 |
0 : 7364 (95.1%) 1 : 383 ( 4.9%) |
0 (0.0%) |
|
| sa_asig_participacion [numeric] |
Mean (sd) : 10.5 (25.4) min < med < max: 0 < 0 < 100 IQR (CV) : 0 (2.4) |
183 distinct values | 0 (0.0%) |
|
| sa_asig_actividades [numeric] |
Mean (sd) : 4.3 (0.3) min < med < max: 1 < 4.3 < 5 IQR (CV) : 0 (0.1) |
100 distinct values | 0 (0.0%) |
|
| sa_asig_organizacion [numeric] |
Mean (sd) : 4.3 (0.2) min < med < max: 1 < 4.3 < 5 IQR (CV) : 0 (0) |
73 distinct values | 0 (0.0%) |
|
| sa_asig_manual [numeric] |
Mean (sd) : 4 (0.3) min < med < max: 1 < 4 < 5 IQR (CV) : 0 (0.1) |
119 distinct values | 0 (0.0%) |
|
| sa_asig_materiales [numeric] |
Mean (sd) : 4.2 (0.2) min < med < max: 1 < 4.2 < 5 IQR (CV) : 0 (0.1) |
75 distinct values | 0 (0.0%) |
|
| sa_asig_docente [numeric] |
Mean (sd) : 4.5 (0.2) min < med < max: 1 < 4.4 < 5 IQR (CV) : 0 (0.1) |
88 distinct values | 0 (0.0%) |
|
| sa_asig_aprendiendo [numeric] |
Mean (sd) : 90.3 (7.1) min < med < max: 6.7 < 90.9 < 100 IQR (CV) : 0 (0.1) |
55 distinct values | 0 (0.0%) |
|
| sa_curso_R [numeric] |
Min : 0 Mean : 0 Max : 1 |
0 : 7536 (97.3%) 1 : 211 ( 2.7%) |
0 (0.0%) |
|
| sa_curso_participacion [numeric] |
Mean (sd) : 3.7 (17.6) min < med < max: 0 < 0 < 100 IQR (CV) : 0 (4.7) |
0.00 : 7376 (95.2%) 25.00 : 2 ( 0.0%) 33.33 : 21 ( 0.3%) 40.00 : 1 ( 0.0%) 50.00 : 120 ( 1.5%) 66.67 : 16 ( 0.2%) 100.00 : 211 ( 2.7%) |
0 (0.0%) |
|
| sa_curso_titulacion [numeric] |
Mean (sd) : 4 (0.2) min < med < max: 1 < 4 < 5 IQR (CV) : 0 (0.1) |
12 distinct values | 0 (0.0%) |
|
| sa_titulacion_R [numeric] |
1 distinct value | 0 : 7747 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_participacion [numeric] |
1 distinct value | 0 : 7747 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_implicacion [numeric] |
1 distinct value | 5 : 7747 (100.0%) | 0 (0.0%) |
|
| il_R [numeric] |
1 distinct value | 0 : 7747 (100.0%) | 0 (0.0%) |
|
| il_participacion [numeric] |
1 distinct value | 0 : 7747 (100.0%) | 0 (0.0%) |
|
| il_consecuencia_estudios [numeric] |
1 distinct value | 0 : 7747 (100.0%) | 0 (0.0%) |
|
| il_motivo_estudios [numeric] |
1 distinct value | 0 : 7747 (100.0%) | 0 (0.0%) |
|
| il_trabajo_actual [numeric] |
1 distinct value | 0 : 7747 (100.0%) | 0 (0.0%) |
|
| il_trabajo_actual_relacionado_estudios [numeric] |
1 distinct value | 0 : 7747 (100.0%) | 0 (0.0%) |
|
| cluster [factor] |
1. 1 2. 2 3. 3 4. 4 |
7747 (100.0%) 0 ( 0.0%) 0 ( 0.0%) 0 ( 0.0%) |
0 (0.0%) |
El 59.59% del estudiantado analizado pertenece a esta categoría. Se caracteriza por:
egresar en 1.04 especialidad/es en una media de 1.83 años;
con tasas de rendimiento (eficiencia, éxito y evaluación) superiores al 97%;
superar, frente a los ECTS requeridos para obtener la titulación, una media del 102.55% (se superan más ECTS de los requeridos, pudiendo obtener distintas especialidades o superar asignaturas optativas adicionales) y reconocer un 7.87% de los requeridos;
obtener una nota media de 8.04;
participación en las encuestas del (asignaturas (15.13%), curso (10.57%), 0.26% en inserción laboral y 9.87% en titulación) y satisfacción media en asignaturas manifestada de 4.3;
su trabajo actual está relacionado con los estudios.
A continuación se muestra el detalle la información descriptiva del perfil del estudiantado, incluyendo gráficos para cada variable, las frecuencias para cada valor y las etiquetas de las variables.
# se visualiza
dfSummary(perfil_2,
plain.ascii = FALSE,
style = 'grid',
graph.magnif = 0.85,
varnumbers = FALSE,
valid.col = FALSE,
tmp.img.dir = "/tmp")
Dimensions: 18399 x 34
Duplicates: 1424
| Variable | Stats / Values | Freqs (% of Valid) | Graph | Missing |
|---|---|---|---|---|
| ste_codalf [numeric] |
Min : 0 Mean : 0.9 Max : 1 |
0 : 1946 (10.6%) 1 : 16453 (89.4%) |
0 (0.0%) |
|
| acceso [numeric] |
Min : 0 Mean : 0.9 Max : 1 |
0 : 1241 ( 6.7%) 1 : 17158 (93.3%) |
0 (0.0%) |
|
| t_sup_req [numeric] |
Mean (sd) : 102.6 (7.1) min < med < max: 25 < 100 < 166.7 IQR (CV) : 0 (0.1) |
47 distinct values | 0 (0.0%) |
|
| t_rec [numeric] |
Mean (sd) : 7.9 (14.3) min < med < max: 0 < 0 < 106.7 IQR (CV) : 10 (1.8) |
185 distinct values | 0 (0.0%) |
|
| nota_media [numeric] |
Mean (sd) : 8 (0.7) min < med < max: 5.5 < 8.1 < 9.9 IQR (CV) : 1 (0.1) |
7077 distinct values | 0 (0.0%) |
|
| tasa_abandono [numeric] |
Min : 0 Mean : 0 Max : 1 |
0 : 18206 (99.0%) 1 : 193 ( 1.0%) |
0 (0.0%) |
|
| titulado [numeric] |
Mean (sd) : 1 (0.1) min < med < max: 0 < 1 < 3 IQR (CV) : 0 (0.1) |
0 : 193 ( 1.0%) 1 : 18033 (98.0%) 2 : 168 ( 0.9%) 3 : 5 ( 0.0%) |
0 (0.0%) |
|
| n_nodos_fin_titulacion [numeric] |
Mean (sd) : 1 (0.3) min < med < max: 0 < 1 < 4 IQR (CV) : 0 (0.3) |
0 : 193 ( 1.0%) 1 : 17545 (95.4%) 2 : 435 ( 2.4%) 3 : 215 ( 1.2%) 4 : 11 ( 0.1%) |
0 (0.0%) |
|
| duracion_media_estudios [numeric] |
Mean (sd) : 1.8 (1.1) min < med < max: 1 < 2 < 13 IQR (CV) : 1 (0.6) |
13 distinct values | 0 (0.0%) |
|
| tasa_eficiencia [numeric] |
Mean (sd) : 97.5 (6.8) min < med < max: 34.9 < 100 < 100 IQR (CV) : 0 (0.1) |
518 distinct values | 0 (0.0%) |
|
| t_exito [numeric] |
Mean (sd) : 99.2 (3.3) min < med < max: 57.1 < 100 < 100 IQR (CV) : 0 (0) |
275 distinct values | 0 (0.0%) |
|
| t_evaluacion [numeric] |
Mean (sd) : 98.2 (5.5) min < med < max: 37.5 < 100 < 100 IQR (CV) : 0 (0.1) |
506 distinct values | 0 (0.0%) |
|
| edad_inicio [numeric] |
Mean (sd) : 29.9 (7.5) min < med < max: 17 < 27 < 74 IQR (CV) : 10 (0.3) |
50 distinct values | 0 (0.0%) |
|
| sa_asig_R [numeric] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 16812 (91.4%) 1 : 1587 ( 8.6%) |
0 (0.0%) |
|
| sa_asig_participacion [numeric] |
Mean (sd) : 15.1 (30.1) min < med < max: 0 < 0 < 100 IQR (CV) : 8.3 (2) |
401 distinct values | 0 (0.0%) |
|
| sa_asig_actividades [numeric] |
Mean (sd) : 4.3 (0.3) min < med < max: 2.6 < 4.3 < 5 IQR (CV) : 0 (0.1) |
147 distinct values | 0 (0.0%) |
|
| sa_asig_organizacion [numeric] |
Mean (sd) : 4.4 (0.2) min < med < max: 3 < 4.3 < 5 IQR (CV) : 0 (0) |
126 distinct values | 0 (0.0%) |
|
| sa_asig_manual [numeric] |
Mean (sd) : 4.1 (0.3) min < med < max: 1 < 4 < 5 IQR (CV) : 0 (0.1) |
177 distinct values | 0 (0.0%) |
|
| sa_asig_materiales [numeric] |
Mean (sd) : 4.2 (0.2) min < med < max: 2 < 4.2 < 5 IQR (CV) : 0 (0.1) |
136 distinct values | 0 (0.0%) |
|
| sa_asig_docente [numeric] |
Mean (sd) : 4.5 (0.2) min < med < max: 1 < 4.4 < 5 IQR (CV) : 0 (0.1) |
141 distinct values | 0 (0.0%) |
|
| sa_asig_aprendiendo [numeric] |
Mean (sd) : 90.2 (8.4) min < med < max: 3 < 90.9 < 100 IQR (CV) : 0 (0.1) |
162 distinct values | 0 (0.0%) |
|
| sa_curso_R [numeric] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 17007 (92.4%) 1 : 1392 ( 7.6%) |
0 (0.0%) |
|
| sa_curso_participacion [numeric] |
Mean (sd) : 10.6 (28.3) min < med < max: 0 < 0 < 100 IQR (CV) : 0 (2.7) |
11 distinct values | 0 (0.0%) |
|
| sa_curso_titulacion [numeric] |
Mean (sd) : 4 (0.3) min < med < max: 1 < 4 < 5 IQR (CV) : 0 (0.1) |
22 distinct values | 0 (0.0%) |
|
| sa_titulacion_R [numeric] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 16591 (90.2%) 1 : 1808 ( 9.8%) |
0 (0.0%) |
|
| sa_titulacion_participacion [numeric] |
Mean (sd) : 9.9 (29.8) min < med < max: 0 < 0 < 100 IQR (CV) : 0 (3) |
0.00 : 16574 (90.1%) 33.33 : 1 ( 0.0%) 50.00 : 15 ( 0.1%) 66.67 : 1 ( 0.0%) 100.00 : 1808 ( 9.8%) |
0 (0.0%) |
|
| sa_titulacion_implicacion [numeric] |
Mean (sd) : 5 (0.1) min < med < max: 1 < 5 < 5 IQR (CV) : 0 (0) |
1.00 : 2 ( 0.0%) 2.00 : 4 ( 0.0%) 3.00 : 22 ( 0.1%) 4.00 : 157 ( 0.9%) 4.50 : 1 ( 0.0%) 5.00 : 18213 (99.0%) |
0 (0.0%) |
|
| il_R [numeric] |
Min : 0 Mean : 0 Max : 1 |
0 : 18351 (99.7%) 1 : 48 ( 0.3%) |
0 (0.0%) |
|
| il_participacion [numeric] |
Min : 0 Mean : 0.3 Max : 100 |
0 : 18351 (99.7%) 100 : 48 ( 0.3%) |
0 (0.0%) |
|
| il_consecuencia_estudios [numeric] |
1 distinct value | 0 : 18399 (100.0%) | 0 (0.0%) |
|
| il_motivo_estudios [numeric] |
1 distinct value | 0 : 18399 (100.0%) | 0 (0.0%) |
|
| il_trabajo_actual [numeric] |
1 distinct value | 0 : 18399 (100.0%) | 0 (0.0%) |
|
| il_trabajo_actual_relacionado_estudios [numeric] |
1 distinct value | 0 : 18399 (100.0%) | 0 (0.0%) |
|
| cluster [factor] |
1. 1 2. 2 3. 3 4. 4 |
0 ( 0.0%) 18399 (100.0%) 0 ( 0.0%) 0 ( 0.0%) |
0 (0.0%) |
El 8.76% del estudiantado analizado pertenece a esta categoría. Se caracteriza por:
egresar en 1.07 especialidad/es en una media de 2.13 años;
con tasas de rendimiento (eficiencia y evaluación) al 98%;
superar, frente a los ECTS requeridos para obtener la titulación, una media del 102.45% (se superan más ECTS de los requeridos, pudiendo obtener distintas especialidades o superar asignaturas optativas adicionales) y reconocer un 9.27% de los requeridos;
obtener una nota media de 8.03;
participación en las encuestas del (asignaturas (37.28%), curso (34.73%), 99.96% en inserción laboral y 61.66% en titulación) y satisfacción media en asignaturas manifestada de 4.22.
A continuación se muestra el detalle la información descriptiva del perfil del estudiantado, incluyendo gráficos para cada variable, las frecuencias para cada valor y las etiquetas de las variables.
# se visualiza
dfSummary(perfil_3,
plain.ascii = FALSE,
style = 'grid',
graph.magnif = 0.85,
varnumbers = FALSE,
valid.col = FALSE,
tmp.img.dir = "/tmp")
Dimensions: 2706 x 34
Duplicates: 117
| Variable | Stats / Values | Freqs (% of Valid) | Graph | Missing |
|---|---|---|---|---|
| ste_codalf [numeric] |
Min : 0 Mean : 0.8 Max : 1 |
0 : 522 (19.3%) 1 : 2184 (80.7%) |
0 (0.0%) |
|
| acceso [numeric] |
Min : 0 Mean : 0.9 Max : 1 |
0 : 348 (12.9%) 1 : 2358 (87.1%) |
0 (0.0%) |
|
| t_sup_req [numeric] |
Mean (sd) : 102.5 (6.6) min < med < max: 100 < 100 < 151.7 IQR (CV) : 0 (0.1) |
23 distinct values | 0 (0.0%) |
|
| t_rec [numeric] |
Mean (sd) : 9.3 (16.3) min < med < max: 0 < 0 < 92.5 IQR (CV) : 10 (1.8) |
100 distinct values | 0 (0.0%) |
|
| nota_media [numeric] |
Mean (sd) : 8 (0.7) min < med < max: 5.8 < 8.1 < 9.7 IQR (CV) : 1 (0.1) |
1885 distinct values | 0 (0.0%) |
|
| tasa_abandono [numeric] |
1 distinct value | 0 : 2706 (100.0%) | 0 (0.0%) |
|
| titulado [numeric] |
Min : 1 Mean : 1 Max : 2 |
1 : 2691 (99.4%) 2 : 15 ( 0.6%) |
0 (0.0%) |
|
| n_nodos_fin_titulacion [numeric] |
Mean (sd) : 1.1 (0.3) min < med < max: 1 < 1 < 4 IQR (CV) : 0 (0.3) |
1 : 2555 (94.4%) 2 : 121 ( 4.5%) 3 : 26 ( 1.0%) 4 : 4 ( 0.1%) |
0 (0.0%) |
|
| duracion_media_estudios [numeric] |
Mean (sd) : 2.1 (1.5) min < med < max: 1 < 2 < 10 IQR (CV) : 1 (0.7) |
1 : 1079 (39.9%) 2 : 1057 (39.1%) 3 : 192 ( 7.1%) 4 : 148 ( 5.5%) 5 : 91 ( 3.4%) 6 : 68 ( 2.5%) 7 : 40 ( 1.5%) 8 : 19 ( 0.7%) 9 : 11 ( 0.4%) 10 : 1 ( 0.0%) |
0 (0.0%) |
|
| tasa_eficiencia [numeric] |
Mean (sd) : 97.1 (7.2) min < med < max: 36.6 < 100 < 100 IQR (CV) : 0 (0.1) |
192 distinct values | 0 (0.0%) |
|
| t_exito [numeric] |
Mean (sd) : 99 (3.7) min < med < max: 68 < 100 < 100 IQR (CV) : 0 (0) |
113 distinct values | 0 (0.0%) |
|
| t_evaluacion [numeric] |
Mean (sd) : 98.1 (5.6) min < med < max: 38 < 100 < 100 IQR (CV) : 0 (0.1) |
172 distinct values | 0 (0.0%) |
|
| edad_inicio [numeric] |
Mean (sd) : 31.1 (8.4) min < med < max: 17 < 29 < 68 IQR (CV) : 11 (0.3) |
47 distinct values | 0 (0.0%) |
|
| sa_asig_R [numeric] |
Min : 0 Mean : 0.3 Max : 1 |
0 : 1962 (72.5%) 1 : 744 (27.5%) |
0 (0.0%) |
|
| sa_asig_participacion [numeric] |
Mean (sd) : 37.3 (40.6) min < med < max: 0 < 21.2 < 100 IQR (CV) : 80 (1.1) |
283 distinct values | 0 (0.0%) |
|
| sa_asig_actividades [numeric] |
Mean (sd) : 4.2 (0.5) min < med < max: 1 < 4.3 < 5 IQR (CV) : 0.2 (0.1) |
172 distinct values | 0 (0.0%) |
|
| sa_asig_organizacion [numeric] |
Mean (sd) : 4.3 (0.5) min < med < max: 1 < 4.3 < 5 IQR (CV) : 0 (0.1) |
151 distinct values | 0 (0.0%) |
|
| sa_asig_manual [numeric] |
Mean (sd) : 4 (0.6) min < med < max: 1 < 4 < 5 IQR (CV) : 0.2 (0.1) |
197 distinct values | 0 (0.0%) |
|
| sa_asig_materiales [numeric] |
Mean (sd) : 4.2 (0.5) min < med < max: 1 < 4.2 < 5 IQR (CV) : 0 (0.1) |
155 distinct values | 0 (0.0%) |
|
| sa_asig_docente [numeric] |
Mean (sd) : 4.4 (0.5) min < med < max: 1 < 4.4 < 5 IQR (CV) : 0.2 (0.1) |
173 distinct values | 0 (0.0%) |
|
| sa_asig_aprendiendo [numeric] |
Mean (sd) : 85.3 (18.6) min < med < max: 3.7 < 90.9 < 100 IQR (CV) : 0 (0.2) |
139 distinct values | 0 (0.0%) |
|
| sa_curso_R [numeric] |
Min : 0 Mean : 0.3 Max : 1 |
0 : 1978 (73.1%) 1 : 728 (26.9%) |
0 (0.0%) |
|
| sa_curso_participacion [numeric] |
Mean (sd) : 34.7 (43.4) min < med < max: 0 < 0 < 100 IQR (CV) : 100 (1.3) |
0.00 : 1549 (57.2%) 20.00 : 1 ( 0.0%) 25.00 : 18 ( 0.7%) 33.33 : 48 ( 1.8%) 50.00 : 306 (11.3%) 66.67 : 46 ( 1.7%) 75.00 : 10 ( 0.4%) 100.00 : 728 (26.9%) |
0 (0.0%) |
|
| sa_curso_titulacion [numeric] |
Mean (sd) : 4 (0.6) min < med < max: 1 < 4 < 5 IQR (CV) : 0 (0.2) |
17 distinct values | 0 (0.0%) |
|
| sa_titulacion_R [numeric] |
Min : 0 Mean : 0.6 Max : 1 |
0 : 1038 (38.4%) 1 : 1668 (61.6%) |
0 (0.0%) |
|
| sa_titulacion_participacion [numeric] |
Mean (sd) : 61.7 (48.6) min < med < max: 0 < 100 < 100 IQR (CV) : 100 (0.8) |
0 : 1037 (38.3%) 50 : 1 ( 0.0%) 100 : 1668 (61.6%) |
0 (0.0%) |
|
| sa_titulacion_implicacion [numeric] |
Mean (sd) : 4.8 (0.5) min < med < max: 1 < 5 < 5 IQR (CV) : 0 (0.1) |
1.00 : 6 ( 0.2%) 2.00 : 7 ( 0.3%) 3.00 : 74 ( 2.7%) 4.00 : 395 (14.6%) 4.50 : 1 ( 0.0%) 5.00 : 2223 (82.2%) |
0 (0.0%) |
|
| il_R [numeric] |
Min : 0 Mean : 1 Max : 1 |
0 : 1 ( 0.0%) 1 : 2705 (100.0%) |
0 (0.0%) |
|
| il_participacion [numeric] |
Min : 0 Mean : 100 Max : 100 |
0 : 1 ( 0.0%) 100 : 2705 (100.0%) |
0 (0.0%) |
|
| il_consecuencia_estudios [numeric] |
Min : 0 Mean : 0.6 Max : 1 |
0 : 1149 (42.5%) 1 : 1557 (57.5%) |
0 (0.0%) |
|
| il_motivo_estudios [numeric] |
Min : 0 Mean : 0.7 Max : 1 |
0 : 879 (32.5%) 1 : 1827 (67.5%) |
0 (0.0%) |
|
| il_trabajo_actual [numeric] |
Min : 0 Mean : 0.9 Max : 1 |
0 : 330 (12.2%) 1 : 2376 (87.8%) |
0 (0.0%) |
|
| il_trabajo_actual_relacionado_estudios [numeric] |
Min : 0 Mean : 0.6 Max : 1 |
0 : 1079 (39.9%) 1 : 1627 (60.1%) |
0 (0.0%) |
|
| cluster [factor] |
1. 1 2. 2 3. 3 4. 4 |
0 ( 0.0%) 0 ( 0.0%) 2706 (100.0%) 0 ( 0.0%) |
0 (0.0%) |
El 6.55% del estudiantado analizado pertenece a esta categoría. Se caracteriza por:
abandonar los estudios en 2.19 años de media;
con tasas de rendimiento (eficiencia y evaluación) inferiores al 96%;
superar, frente a los ECTS requeridos para obtener la titulación, una media del 94.53% (se superan más ECTS de los requeridos, pudiendo obtener distintas especialidades o superar asignaturas optativas adicionales) y reconocer un 11.15% de los requeridos;
obtener una nota media de 7.97;
participación baja en las encuestas (asignaturas (62.03%), curso (42.12%), 3.41% en inserción laboral y 20.81% en titulación) y satisfacción media en asignaturas manifestada de 3.2.
A continuación se muestra el detalle la información descriptiva del perfil del estudiantado, incluyendo gráficos para cada variable, las frecuencias para cada valor y las etiquetas de las variables.
# se visualiza
dfSummary(perfil_4,
plain.ascii = FALSE,
style = 'grid',
graph.magnif = 0.85,
varnumbers = FALSE,
valid.col = FALSE,
tmp.img.dir = "/tmp")
Dimensions: 2023 x 34
Duplicates: 45
| Variable | Stats / Values | Freqs (% of Valid) | Graph | Missing |
|---|---|---|---|---|
| ste_codalf [numeric] |
Min : 0 Mean : 0.7 Max : 1 |
0 : 610 (30.2%) 1 : 1413 (69.8%) |
0 (0.0%) |
|
| acceso [numeric] |
Min : 0 Mean : 0.8 Max : 1 |
0 : 359 (17.7%) 1 : 1664 (82.3%) |
0 (0.0%) |
|
| t_sup_req [numeric] |
Mean (sd) : 94.5 (23) min < med < max: 0 < 100 < 150 IQR (CV) : 0 (0.2) |
68 distinct values | 0 (0.0%) |
|
| t_rec [numeric] |
Mean (sd) : 11.2 (19.3) min < med < max: 0 < 0 < 92.5 IQR (CV) : 10 (1.7) |
92 distinct values | 0 (0.0%) |
|
| nota_media [numeric] |
Mean (sd) : 8 (0.8) min < med < max: 5.3 < 8 < 10 IQR (CV) : 1.1 (0.1) |
1411 distinct values | 0 (0.0%) |
|
| tasa_abandono [numeric] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 1796 (88.8%) 1 : 227 (11.2%) |
0 (0.0%) |
|
| titulado [numeric] |
Mean (sd) : 0.9 (0.3) min < med < max: 0 < 1 < 2 IQR (CV) : 0 (0.4) |
0 : 227 (11.2%) 1 : 1777 (87.8%) 2 : 19 ( 0.9%) |
0 (0.0%) |
|
| n_nodos_fin_titulacion [numeric] |
Mean (sd) : 1 (0.5) min < med < max: 0 < 1 < 4 IQR (CV) : 0 (0.5) |
0 : 227 (11.2%) 1 : 1657 (81.9%) 2 : 116 ( 5.7%) 3 : 20 ( 1.0%) 4 : 3 ( 0.1%) |
0 (0.0%) |
|
| duracion_media_estudios [numeric] |
Mean (sd) : 2.2 (1.6) min < med < max: 1 < 2 < 10 IQR (CV) : 1 (0.7) |
1 : 851 (42.1%) 2 : 697 (34.5%) 3 : 145 ( 7.2%) 4 : 112 ( 5.5%) 5 : 102 ( 5.0%) 6 : 63 ( 3.1%) 7 : 30 ( 1.5%) 8 : 15 ( 0.7%) 9 : 4 ( 0.2%) 10 : 4 ( 0.2%) |
0 (0.0%) |
|
| tasa_eficiencia [numeric] |
Mean (sd) : 94 (15.9) min < med < max: 0 < 100 < 100 IQR (CV) : 0 (0.2) |
200 distinct values | 0 (0.0%) |
|
| t_exito [numeric] |
Mean (sd) : 97.1 (11.8) min < med < max: 0 < 100 < 100 IQR (CV) : 0 (0.1) |
114 distinct values | 0 (0.0%) |
|
| t_evaluacion [numeric] |
Mean (sd) : 95.9 (12.6) min < med < max: 0 < 100 < 100 IQR (CV) : 0 (0.1) |
166 distinct values | 0 (0.0%) |
|
| edad_inicio [numeric] |
Mean (sd) : 31.3 (8) min < med < max: 17 < 29 < 69 IQR (CV) : 11 (0.3) |
46 distinct values | 0 (0.0%) |
|
| sa_asig_R [numeric] |
Min : 0 Mean : 0.4 Max : 1 |
0 : 1144 (56.5%) 1 : 879 (43.5%) |
0 (0.0%) |
|
| sa_asig_participacion [numeric] |
Mean (sd) : 62 (33.4) min < med < max: 1.8 < 64.7 < 100 IQR (CV) : 70.6 (0.5) |
281 distinct values | 0 (0.0%) |
|
| sa_asig_actividades [numeric] |
Mean (sd) : 3.1 (0.8) min < med < max: 1 < 3.3 < 5 IQR (CV) : 0.9 (0.3) |
201 distinct values | 0 (0.0%) |
|
| sa_asig_organizacion [numeric] |
Mean (sd) : 3.4 (0.8) min < med < max: 1 < 3.5 < 5 IQR (CV) : 1 (0.2) |
172 distinct values | 0 (0.0%) |
|
| sa_asig_manual [numeric] |
Mean (sd) : 3 (0.8) min < med < max: 1 < 3.1 < 5 IQR (CV) : 1 (0.3) |
192 distinct values | 0 (0.0%) |
|
| sa_asig_materiales [numeric] |
Mean (sd) : 3.2 (0.8) min < med < max: 1 < 3.3 < 5 IQR (CV) : 1 (0.3) |
174 distinct values | 0 (0.0%) |
|
| sa_asig_docente [numeric] |
Mean (sd) : 3.3 (0.9) min < med < max: 1 < 3.4 < 5 IQR (CV) : 0.9 (0.3) |
205 distinct values | 0 (0.0%) |
|
| sa_asig_aprendiendo [numeric] |
Mean (sd) : 72.3 (26.5) min < med < max: 2.9 < 90.9 < 100 IQR (CV) : 40.9 (0.4) |
149 distinct values | 0 (0.0%) |
|
| sa_curso_R [numeric] |
Min : 0 Mean : 0.3 Max : 1 |
0 : 1345 (66.5%) 1 : 678 (33.5%) |
0 (0.0%) |
|
| sa_curso_participacion [numeric] |
Mean (sd) : 42.1 (45) min < med < max: 0 < 25 < 100 IQR (CV) : 100 (1.1) |
11 distinct values | 0 (0.0%) |
|
| sa_curso_titulacion [numeric] |
Mean (sd) : 3.6 (0.9) min < med < max: 1 < 4 < 5 IQR (CV) : 1 (0.3) |
23 distinct values | 0 (0.0%) |
|
| sa_titulacion_R [numeric] |
Min : 0 Mean : 0.2 Max : 1 |
0 : 1606 (79.4%) 1 : 417 (20.6%) |
0 (0.0%) |
|
| sa_titulacion_participacion [numeric] |
Mean (sd) : 20.8 (40.5) min < med < max: 0 < 0 < 100 IQR (CV) : 0 (1.9) |
0 : 1598 (79.0%) 50 : 8 ( 0.4%) 100 : 417 (20.6%) |
0 (0.0%) |
|
| sa_titulacion_implicacion [numeric] |
Mean (sd) : 4.9 (0.3) min < med < max: 2 < 5 < 5 IQR (CV) : 0 (0.1) |
2 : 1 ( 0.0%) 3 : 20 ( 1.0%) 4 : 88 ( 4.3%) 5 : 1914 (94.6%) |
0 (0.0%) |
|
| il_R [numeric] |
Min : 0 Mean : 0 Max : 1 |
0 : 1954 (96.6%) 1 : 69 ( 3.4%) |
0 (0.0%) |
|
| il_participacion [numeric] |
Min : 0 Mean : 3.4 Max : 100 |
0 : 1954 (96.6%) 100 : 69 ( 3.4%) |
0 (0.0%) |
|
| il_consecuencia_estudios [numeric] |
Min : 0 Mean : 0 Max : 1 |
0 : 2013 (99.5%) 1 : 10 ( 0.5%) |
0 (0.0%) |
|
| il_motivo_estudios [numeric] |
Min : 0 Mean : 0 Max : 1 |
0 : 1990 (98.4%) 1 : 33 ( 1.6%) |
0 (0.0%) |
|
| il_trabajo_actual [numeric] |
Min : 0 Mean : 0 Max : 1 |
0 : 1989 (98.3%) 1 : 34 ( 1.7%) |
0 (0.0%) |
|
| il_trabajo_actual_relacionado_estudios [numeric] |
Min : 0 Mean : 0 Max : 1 |
0 : 2016 (99.7%) 1 : 7 ( 0.3%) |
0 (0.0%) |
|
| cluster [factor] |
1. 1 2. 2 3. 3 4. 4 |
0 ( 0.0%) 0 ( 0.0%) 0 ( 0.0%) 2023 (100.0%) |
0 (0.0%) |
Se crea una nueva variable que etiqueta a los perfiles del estudiantado. Se muestra la distribución de etiquetas y su correspondencia con el cluster:
# se crea nueva variable
rto_fin_abandono_clas$etiqueta = ifelse(rto_fin_abandono_clas$cluster == 1,
"dropout",
ifelse(rto_fin_abandono_clas$cluster == 2,
"common_graduate",
ifelse(rto_fin_abandono_clas$cluster == 3,
"motivated",
"dissatisfied")))
# se muestra la distribución de etiquetas y su correspondencia
dis_etiqueta_cluster = rto_fin_abandono_clas %>% group_by(etiqueta) %>% count()
datatable(dis_etiqueta_cluster)
Se pretende predecir qué tipo de perfil (4 clusters recién definidos) tiene cada estudiante que se encuentra en progreso (no ha finalizado ni abandonado sus estudios).
Actualmente se cuenta con 7989 estudiantes en progreso. El principal interés es identificar sus características para poder realizar un seguimiento adecuado, principalmente, de los que se encuentran en riesgo de abandono.
Para llevarlo a cabo se aplicarán técnicas de aprendizaje supervisado y se utilizará el algoritmo de clasificación que aporte mejores resultados. Para determinar el mejor modelo se va a aplicar validación cruzada sobre los datos de entrada, optando por el que mayor calidad de predicción aporte.
Los métodos de clasificación tienden al sobre entrenamiento u overfitting, para evitarlo, se aplicará 10-Fold-Cross-Validation, que consiste en:
Se aplica el proceso y se eliminan las variables con valor único (predictores de varianza cero), que son:
# se define set.seed(n) para forzar a que los valores de la muestra aleatoria sean los mismos siempre
set.seed(1234)
# se recupera la etiqueta
rto_fin_abandono_red$cluster = y_cluster4
# se eliminan variables con valor único (predictores de varianza cero)
nzv = nearZeroVar(rto_fin_abandono_red[, -ncol(rto_fin_abandono_red)])
rto_fin_abandono_pred = rto_fin_abandono_red[,-nzv]
# se eliminan las variables con valor único (predictores de varianza cero)
names(rto_fin_abandono_red[, nzv])
## [1] "sa_curso_titulacion" "sa_titulacion_implicacion"
# con ayuda de la library(caTools) se obtienen muestras proporcionadas por el tipo de clasificación
# se crea un vector de particion sobre la variable cluster
# el tamaño de muestra será de 80%
trainIndex = sample.split(y_cluster4, SplitRatio = 0.8)
# se definen las variables a utilizar en la clasificación
rto_fin_abandono_train = rto_fin_abandono_pred[trainIndex == TRUE, ]
rto_fin_abandono_test = rto_fin_abandono_pred[trainIndex == FALSE, ]
y_train = y_cluster4[trainIndex == TRUE]
y_test = y_cluster4[trainIndex == FALSE]
# Para aplicar la Validación Cruzada vamos a hacer uso de la función trainControl del paquete caret, y luego entrenaremos cada modelo sobre k = 10 subconjuntos:
trControl = trainControl(method = "cv",
number = 10)
El algoritmo k-NN mide distancias entre conjuntos de datos para identificar patrones sin un aprendizaje específico.
El procedimiento consiste en:
Para aplicarlo se hará uso de la función train del paquete caret, aplicando el método ‘knn’ y 10-Fold-Cross-Validation. . Limitaciones del algoritmo:
# se define set.seed(n) para forzar a que los valores de la muestra aleatoria sean los mismos siempre
set.seed(1234)
# k-NN
validacion_knn = train(cluster ~ .,
method = "knn",
tuneGrid = expand.grid(k = seq(3, 15, 2)), # valores impares de k para evitar empate
trControl = trControl,
metric = "Accuracy",
data = rto_fin_abandono_train)
# resultado
validacion_knn
## k-Nearest Neighbors
##
## 24700 samples
## 31 predictor
## 4 classes: '1', '2', '3', '4'
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
## Summary of sample sizes: 22230, 22232, 22230, 22230, 22229, 22230, ...
## Resampling results across tuning parameters:
##
## k Accuracy Kappa
## 3 0.9849801 0.9735678
## 5 0.9855469 0.9745442
## 7 0.9846967 0.9730296
## 9 0.9840894 0.9719335
## 11 0.9837657 0.9713629
## 13 0.9833610 0.9706536
## 15 0.9832798 0.9705168
##
## Accuracy was used to select the optimal model using the largest value.
## The final value used for the model was k = 5.
# grafico (max k)
plot(validacion_knn)
Un bosque aleatorio de decisión (Random forest) consiste en aplicar de manera iterativa el algoritmo de árboles de decisión con diferentes parámetros sobre los mismos datos siendo uno de los métodos más eficientes de predicción por aplicar el promedio de muchos modelos reduciendo la variabilidad final del conjunto.
Esta iteración crea modelos más robustos de los que se obtendrían creando un solo árbol de decisión.
Para aplicarlo se hará uso de la función train del paquete caret, aplicando el método ‘rf’ y 10-Fold-Cross-Validation.
# se define set.seed(n) para forzar a que los valores de la muestra aleatoria sean los mismos siempre
set.seed(1234)
# Random Forest
validacion_rf = train(cluster ~ .,
method = "rf",
trControl = trControl,
metric = "Accuracy",
data = rto_fin_abandono_train)
# resultado
validacion_rf
## Random Forest
##
## 24700 samples
## 31 predictor
## 4 classes: '1', '2', '3', '4'
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
## Summary of sample sizes: 22230, 22232, 22230, 22230, 22229, 22230, ...
## Resampling results across tuning parameters:
##
## mtry Accuracy Kappa
## 2 0.9787860 0.9627071
## 16 0.9879354 0.9788098
## 31 0.9864779 0.9762633
##
## Accuracy was used to select the optimal model using the largest value.
## The final value used for the model was mtry = 16.
Para optimizar los resultados a obtener, se comprueba la exactitud o accuracy para diferentes algoritmos. A mayor exactitud o accuracy, mayor calidad:
# en cada tipo de validación se identifica el algortimo
validacion_knn$results[, 'Algoritmo'] = 'k-NN'
validacion_rf$results[, 'Algoritmo'] = 'Random Forest'
# la métrica se renombra y se elimina (para poder unir)
validacion_knn$results[, 'Valor'] = validacion_knn$results[, 'k']
validacion_knn$results[, 'Métrica'] = 'k'
validacion_knn$results[, 'k'] = NULL
validacion_rf$results[, 'Valor'] = validacion_rf$results[, 'mtry']
validacion_rf$results[, 'Métrica'] = 'mtry'
validacion_rf$results[, 'mtry'] = NULL
# se comparan resultados
validacion = rbind(validacion_knn$results,
validacion_rf$results)
# se muestran
datatable(validacion)
Se obtiene que:
# se filtran los resultados con mejor accuracy
validacion_max = validacion %>%
arrange(Accuracy)
# se muestran
datatable(validacion_max[nrow(validacion_max),])
Conocido el algoritmo con óptimos resultados, se aplica al juego de datos de 7989 de entrenamiento estudiantes en progreso (no han finalizado ni abandonado sus estudios) para predecir su categoría.
El principal interés es identificar sus características para poder realizar un seguimiento adecuado, principalmente, de los que se encuentran en riesgo de abandono.
Para aplicarlo se hará uso de la función randomForest del paquete randomForest.
Se muestra la evolución de árboles del modelo a partir del conjunto de entrenamiento:
# se elimina variable a predecir
rto_fin_abandono_train$cluster = NULL
# se entrena
rf_segment = randomForest(y_train ~ .,
data = rto_fin_abandono_train,
ntree = 100, # numero de árboles en el bosque
mtry = validacion_max[nrow(validacion_max),'Valor'] # máximo de variables en modelos
)
# se muestra la evolución de árboles del modelo
rf_segment
##
## Call:
## randomForest(formula = y_train ~ ., data = rto_fin_abandono_train, ntree = 100, mtry = validacion_max[nrow(validacion_max), "Valor"])
## Type of random forest: classification
## Number of trees: 100
## No. of variables tried at each split: 16
##
## OOB estimate of error rate: 1.19%
## Confusion matrix:
## 1 2 3 4 class.error
## 1 6177 8 0 13 0.003388190
## 2 28 14617 4 70 0.006929819
## 3 0 3 2159 3 0.002771363
## 4 34 112 18 1454 0.101359703
plot(rf_segment)
# se guarda
# saveRDS(rf_segment,'model_rf.rds')
# si es necesario, se carga
# rf_segment = readRDS('model_rf.rds')
Se revisa la importancia de las 10 variables del modelo para comprobar que no exista una alta correlación con la variable a predecir:
# importancia de variables del modelo
varImpPlot(rf_segment, sort = T, main = "Variable Importance Plot", n.var = 10)
Se realiza la predicción sobre el conjunto de test y se obtiene la bondad de su ajuste:
# https://www.rdocumentation.org/packages/randomForest/versions/4.7-1.1/topics/predict.randomForest
# se elimina variable a predecir
rto_fin_abandono_test$cluster = NULL
# Se realiza la predicción sobre el test
pred_rf = predict(rf_segment, rto_fin_abandono_test)
table(observed = y_test, predicted = pred_rf)
## predicted
## observed 1 2 3 4
## 1 1545 2 0 2
## 2 4 3661 0 15
## 3 0 4 533 4
## 4 10 36 13 346
# bondad de la prediccion
aciertos_rf = mean(pred_rf == y_test)
# se muestra
aciertos_rf
## [1] 0.9854251
Se realiza la predicción sobre el grupo a predecir (conjunto de datos con estudiantes en progreso):
# se define set.seed(n) para forzar a que los valores de la muestra aleatoria sean los mismos siempre
set.seed(1234)
# se crea bbdd reducida con clasificación y valores orifinales
rto_progreso_pred = rto_progreso %>%
select(variables_svd)
# se realiza la predicción sobre el grupo a predecir
rto_progreso_pred$pred_rf = predict(rf_segment, rto_progreso_red)
# se crea nueva variable
rto_progreso_pred$etiqueta = ifelse(rto_progreso_pred$pred_rf == 1,
"dropout",
ifelse(rto_progreso_pred$pred_rf == 2,
"common_graduate",
ifelse(rto_progreso_pred$pred_rf == 3,
"motivated",
"dissatisfied")))
# se muestra la distribución de etiquetas y su correspondencia con el cluster
dis_etiqueta_cluster2 = rto_progreso_pred %>% group_by(pred_rf) %>% count()
datatable(dis_etiqueta_cluster2)
# se obtienen las distintas bases de datos asociadas a cada perfil
perfil_1_pre = rto_progreso_pred %>% filter(etiqueta == "dropout")
perfil_2_pre = rto_progreso_pred %>% filter(etiqueta == "common_graduate")
perfil_3_pre = rto_progreso_pred %>% filter(etiqueta == "motivated")
perfil_4_pre = rto_progreso_pred %>% filter(etiqueta == "dissatisfied")
Se compara los resultados de cada categoría en el juego de datos original y en el de predicción obteniendo lo siguientes resultados, con especial atención en la proporción y las variables relacionadas con el egreso/abandono:
# se define función para tener mostrar comparación de resultados
comparacion_item = function(x){
resultados = c(paste0('Mean (sd): ',
round(mean(perfil_1[[x]], na.rm=TRUE), 1),
' (', round(sd(perfil_1[[x]], na.rm=TRUE), 1),')'), # motivated_clas
paste0('Mean (sd): ',
round(mean(perfil_1_pre[[x]], na.rm=TRUE), 1),
' (', round(sd(perfil_1_pre[[x]], na.rm=TRUE), 1),')'), # motivated_pred
paste0('Mean (sd): ',
round(mean(perfil_2[[x]], na.rm=TRUE), 1),
' (', round(sd(perfil_2[[x]], na.rm=TRUE), 1),')'), # dissatisfied_clas
paste0('Mean (sd): ',
round(mean(perfil_2_pre[[x]], na.rm=TRUE), 1),
' (', round(sd(perfil_2_pre[[x]], na.rm=TRUE), 1),')'), # dissatisfied_pred
paste0('Mean (sd): ',
round(mean(perfil_3[[x]], na.rm=TRUE), 1),
' (', round(sd(perfil_3[[x]], na.rm=TRUE), 1),')'), # motivated_clas
paste0('Mean (sd): ',
round(mean(perfil_3_pre[[x]], na.rm=TRUE), 1),
' (', round(sd(perfil_3_pre[[x]], na.rm=TRUE), 1),')'), # motivated_pred
paste0('Mean (sd): ',
round(mean(perfil_4[[x]], na.rm=TRUE), 1),
' (', round(sd(perfil_4[[x]], na.rm=TRUE), 1),')'), # dropout_clas
paste0('Mean (sd): ',
round(mean(perfil_4_pre[[x]], na.rm=TRUE), 1),
' (', round(sd(perfil_4_pre[[x]], na.rm=TRUE), 1),')') # dropout_pred
)
return(resultados)
}
# Comparación clasificación-predicción
comparacion = data.frame(
perfil = c('dropout',
'dropout',
'common_graduate',
'common_graduate',
'motivated',
'motivated',
'dissatisfied',
'dissatisfied'),
método = c('clasificación',
'predicción',
'clasificación',
'predicción',
'clasificación',
'predicción',
'clasificación',
'predicción'
),
"proporción" = c(paste0(nrow(perfil_1),
" (", round(100*nrow(perfil_1)/nrow(rto_fin_abandono), 2), "%)"),
paste0(nrow(perfil_1_pre),
" (", round(100*nrow(perfil_1_pre)/nrow(rto_progreso), 2), "%)"),
paste0(nrow(perfil_2),
" (", round(100*nrow(perfil_2)/nrow(rto_fin_abandono), 2), "%)"),
paste0(nrow(perfil_2_pre),
" (", round(100*nrow(perfil_2_pre)/nrow(rto_progreso), 2), "%)"),
paste0(nrow(perfil_3),
" (", round(100*nrow(perfil_3)/nrow(rto_fin_abandono), 2), "%)"),
paste0(nrow(perfil_3_pre),
" (", round(100*nrow(perfil_3_pre)/nrow(rto_progreso), 2), "%)"),
paste0(nrow(perfil_4),
" (", round(100*nrow(perfil_4)/nrow(rto_fin_abandono), 2), "%)"),
paste0(nrow(perfil_4_pre),
" (", round(100*nrow(perfil_4_pre)/nrow(rto_progreso), 2), "%)")
),
'titulado' = comparacion_item('titulado'),
'n_especialidades' = comparacion_item('n_nodos_fin_titulacion'),
'tasa_eficiencia' = comparacion_item('tasa_eficiencia'),
't_sup_req' = comparacion_item('t_sup_req'),
'nota_media' = comparacion_item('nota_media')
)
comparacion_t = data.frame(t(comparacion[-1]))
# Añadimos los nombres de las columnas
colnames(comparacion_t) = comparacion[, 1]
# se muestran resultados
datatable(comparacion_t)
Como se ha podido comprobar en el gráfico de importancia de las variables del modelo Random Forest, las variables más importantes están relacionadas con el egreso de los estudiantes, mantenerlas en el modelo con el fin de predecir la clasificación de los estudiantes en progreso se considera una limitación, pues al estar en progreso, es lógico que sus resultados se vean condicionados y no sean comparables. Sus rendimientos son menores y no han finalizado los estudios, lo que motiva que estas variables condicionen al modelo y clasifique a la mayoría de estudiantes bajo la etiqueta dropout, cuando posiblemente no estén en riesgo de abandono. Si aplicamos este modelo a los estudiantes en progreso vemos como el mismo identifica al 10.5% en riesgo de abandono, lo que resulta llamativo y, posiblemente, no real. Las variables que informan o dependen del egreso/abandono del estudiante son: tasa_abandono, titulado, n_nodos_fin_titulacion, sa_titulacion_R, sa_titulacion_participacion, sa_titulacion_implicacion, il_R, il_participacion, il_consecuencia_estudios. Estas variables se eliminan para que no condicionen la predicción de la clasificación.
# se define set.seed(n) para forzar a que los valores de la muestra aleatoria sean los mismos siempre
set.seed(1234)
# se recupera la etiqueta
rto_fin_abandono_red$cluster = y_cluster4
# se eliminan las variables relacionadas con el egreso/abandono
v_titulados = c('t_sup_req', 'tasa_abandono', 'titulado', 'n_nodos_fin_titulacion', 'duracion_media_estudios',
'sa_titulacion_R', 'sa_titulacion_participacion', 'sa_titulacion_implicacion', 'il_R',
'il_participacion', 'il_consecuencia_estudios', 'il_motivo_estudios', 'il_trabajo_actual',
'il_trabajo_actual_relacionado_estudios')
rto_fin_abandono_pred = select(rto_fin_abandono_red,
-v_titulados)
# se eliminan las variables con valor único (predictores de varianza cero)
# names(rto_fin_abandono_red[, nzv])
# con ayuda de la library(caTools) se obtienen muestras proporcionadas por el tipo de clasificación
# se crea un vector de particion sobre la variable cluster
# el tamaño de muestra será de 80%
trainIndex = sample.split(y_cluster4, SplitRatio = 0.8)
# se definen las variables a utilizar en la clasificación
rto_fin_abandono_train = rto_fin_abandono_pred[trainIndex == TRUE, ]
rto_fin_abandono_test = rto_fin_abandono_pred[trainIndex == FALSE, ]
y_train = y_cluster4[trainIndex == TRUE]
y_test = y_cluster4[trainIndex == FALSE]
# Para aplicar la Validación Cruzada vamos a hacer uso de la función trainControl del paquete caret, y luego entrenaremos cada modelo sobre k = 10 subconjuntos haciendo uso de la función lapply:
trControl = trainControl(method = "cv",
number = 10)
El juego de datos se reduce a las variables que dependen del progreso de los estudiantes, excluyendo las relativas al egreso/abandono:
Quedando compuesto de las siguientes variables:
names(rto_fin_abandono_pred)
## [1] "ste_codalf" "acceso" "t_rec"
## [4] "nota_media" "tasa_eficiencia" "t_exito"
## [7] "t_evaluacion" "edad_inicio" "sa_asig_R"
## [10] "sa_asig_participacion" "sa_asig_actividades" "sa_asig_organizacion"
## [13] "sa_asig_manual" "sa_asig_materiales" "sa_asig_docente"
## [16] "sa_asig_aprendiendo" "sa_curso_R" "sa_curso_participacion"
## [19] "sa_curso_titulacion" "cluster"
Y recordando su definición:
| Variable | Descripción | Valores | Tipo | Explotación |
|---|---|---|---|---|
| ste_codalf | Tipo de estudios | 0: Grado, 1: Máster | Cardinal | Sí |
| acceso | Tipo acceso presentado | 1: Titulado Universitario, 0: No | Cardinal | Sí |
| t_rec | 100*ECTS reconocidos/total a superar | >=0 | Cardinal | Sí |
| nota_media | Media ponderada ECTS superados en Udima | >=0 | Cardinal | Sí |
| tasa_eficiencia | 100*ECTS superados/matriculados | >=0 | Cardinal | Sí |
| t_exito | 100*ECTS superados/presentados | >=0 | Cardinal | Sí |
| t_evaluacion | 100*ECTS presentados/matriculados | >=0 | Cardinal | Sí |
| sa_asig_R | Representatividad de la muestra | 1: “Sí”, 0: “No” | Cardinal | Sí |
| sa_asig_participacion | Proporción de encuestas respondidas por el estudiante en las asignaturas del plan respecto de las que han sido enviadas | entre 0 y 1 | Cardinal | Sí |
| sa_asig_organizacion | Promedio de valoraciones aportadas por el estudiante en las asignaturas para el ítem La organización de la asignatura facilita el aprendizaje de esta asignatura. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
| sa_asig_manual | Promedio de valoraciones aportadas por el estudiante en las asignaturas para el ítem El manual facilita el aprendizaje de esta asignatura | >=1 y <= 5 | Cardinal | Sí |
| sa_asig_materiales | Promedio de valoraciones aportadas por el estudiante en las asignaturas para el ítem Otros materiales didácticos aportados facilitan el aprendizaje de esta asignatura | >=1 y <= 5 | Cardinal | Sí |
| sa_asig_actividades | Promedio de valoraciones aportadas por el estudiante en las asignaturas para el ítem Las actividades didácticas planteadas facilitan el aprendizaje de esta asignatura | >=1 y <= 5 | Cardinal | Sí |
| sa_asig_docente | Promedio de valoraciones aportadas por el estudiante en las asignaturas para el ítem La labor del docente facilita el aprendizaje de esta asignatura | >=1 y <= 5 | Cardinal | Sí |
| sa_asig_aprendiendo | Porcentaje de respuestas Sí al ítem ¿Consideras que estás aprendiendo? respecto de las encuestas respondidas por el estudiante en las asignaturas | entre 0 y 1 | Cardinal | Sí |
| sa_curso_R | Representatividad de la muestra | 1: “Sí”, 0: “No” | Cardinal | Sí |
| sa_curso_participacion | Proporción de encuestas respondidas por el estudiante en los cursos matriculados en el plan respecto de las que han sido enviadas | entre 0 y 1 | Cardinal | Sí |
| sa_curso_titulacion | Promedio de valoraciones aportadas por el estudiante en los cursos matriculados en el plan para el ítem ‘Grado de satisfacción general con la titulación’. Escala 1-5 | >=1 y <= 5 | Cardinal | Sí |
Representatividad de la muestra (determina si la muestra es estadísticamente significativa): Dado que las respuestas recibidas responden a un muestreo se determina la obtención de muestra representativa mediante la fórmula:
\[Muestra\ representativa\ (n)\ = \frac{\frac{z^{2}\ p\ (1-p)\ }{e^{2}}}{1 + \frac{z^{2}\ p\ (1-p)\ }{e^{2} N\ }}\]
Siendo:
Nivel de confianza (NC) del 80%, lo que implica Z-score (z) de 1.282.
Proporción esperada (p): para maximizar el tamaño muestral será de 0.5 (50%).
Error muestral (e) del 10%.
Población (N): cantidad total de usuarios a los que se invita a participar en el estudio.
# se define set.seed(n) para forzar a que los valores de la muestra aleatoria sean los mismos siempre
set.seed(1234)
# k-NN
validacion_knn = train(cluster ~ .,
method = "knn",
tuneGrid = expand.grid(k = seq(3, 15, 2)), # valores impares de k para evitar empate
trControl = trControl,
metric = "Accuracy",
data = rto_fin_abandono_train)
# se define set.seed(n) para forzar a que los valores de la muestra aleatoria sean los mismos siempre
set.seed(1234)
# Random Forest
validacion_rf = train(cluster ~ .,
method = "rf",
trControl = trControl,
metric = "Accuracy",
data = rto_fin_abandono_train)
# en cada tipo de validación se identifica el algortimo
validacion_knn$results[, 'Algoritmo'] = 'k-NN'
validacion_rf$results[, 'Algoritmo'] = 'Random Forest'
# la métrica se renombra y se elimina (para poder unir)
validacion_knn$results[, 'Valor'] = validacion_knn$results[, 'k']
validacion_knn$results[, 'Métrica'] = 'k'
validacion_knn$results[, 'k'] = NULL
validacion_rf$results[, 'Valor'] = validacion_rf$results[, 'mtry']
validacion_rf$results[, 'Métrica'] = 'mtry'
validacion_rf$results[, 'mtry'] = NULL
# se comparan resultados
validacion = rbind(validacion_knn$results,
validacion_rf$results)
# se filtran los resultados con mejor accuracy
validacion_max = validacion %>%
arrange(Accuracy)
# se exportan resultados a latex
# print(xtable(validacion), include.rownames = TRUE)
# se elimina variable a predecir
rto_fin_abandono_train$cluster = NULL
# se entrena
rf_segment = randomForest(y_train ~ .,
data = rto_fin_abandono_train,
ntree = 100, # numero de árboles en el bosque
mtry = validacion_max[nrow(validacion_max),'Valor'] # máximo de variables en modelos
)
# se elimina variable a predecir
rto_fin_abandono_test$cluster = NULL
# Se realiza la predicción sobre el test
pred_rf = predict(rf_segment, rto_fin_abandono_test)
# bondad de la prediccion
aciertos_rf = mean(pred_rf == y_test)
# se define set.seed(n) para forzar a que los valores de la muestra aleatoria sean los mismos siempre
set.seed(1234)
rto_progreso_pred = rto_progreso
# se realiza la predicción sobre el grupo a predecir
rto_progreso_pred$pred_rf = predict(rf_segment, rto_progreso_red)
# se crea nueva variable
rto_progreso_pred$etiqueta = ifelse(rto_progreso_pred$pred_rf == 1,
"dropout",
ifelse(rto_progreso_pred$pred_rf == 2,
"common_graduate",
ifelse(rto_progreso_pred$pred_rf == 3,
"motivated",
"dissatisfied")))
# se muestra la distribución de etiquetas y su correspondencia con el cluster
dis_etiqueta_cluster2 = rto_progreso_pred %>% group_by(pred_rf) %>% count()
# se obtienen las distintas bases de datos asociadas a cada perfil
perfil_1_pre = rto_progreso_pred %>% filter(etiqueta == "dropout")
perfil_2_pre = rto_progreso_pred %>% filter(etiqueta == "common_graduate")
perfil_3_pre = rto_progreso_pred %>% filter(etiqueta == "motivated")
perfil_4_pre = rto_progreso_pred %>% filter(etiqueta == "dissatisfied")
Por dicho motivo, se va a realizar de nuevo el proceso de clasificación y predicción eliminando del juego de datos las variables relacionadas con el egreso/abandono, para que no condicione tanto la predicción de la clasificación de estudiantes en progreso. Realizando dicho cambio, el nuevo modelo predice que el 59.59% del estudiantado en progreso se encuentra en riesgo de abandono, lo que se considera más adecuado (reduciendo la accuracy o exactitud de la aplicación del modelo al conjunto de test al 86.45%).
A continuación se muestran los resultados resumidos de dicho proceso:
Validación k-NN:
# k-NN
# resultado
validacion_knn
## k-Nearest Neighbors
##
## 24700 samples
## 19 predictor
## 4 classes: '1', '2', '3', '4'
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
## Summary of sample sizes: 22230, 22232, 22230, 22230, 22229, 22230, ...
## Resampling results across tuning parameters:
##
## Accuracy Kappa Algoritmo Valor Métrica
## 0.8189474 0.6672928 k-NN 3 k
## 0.8307290 0.6842100 k-NN 5 k
## 0.8358704 0.6909341 k-NN 7 k
## 0.8385430 0.6946409 k-NN 9 k
## 0.8402022 0.6964797 k-NN 11 k
## 0.8411743 0.6979649 k-NN 13 k
## 0.8412556 0.6975441 k-NN 15 k
##
## Tuning parameter 'k' was held constant at a value of 15
## Accuracy was used to select the optimal model using the largest value.
## The final value used for the model was k = 15.
Validación Random Forest:
# resultado
validacion_rf
## Random Forest
##
## 24700 samples
## 19 predictor
## 4 classes: '1', '2', '3', '4'
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
## Summary of sample sizes: 22230, 22232, 22230, 22230, 22229, 22230, ...
## Resampling results across tuning parameters:
##
## Accuracy Kappa Algoritmo Valor Métrica
## 0.8623083 0.7389186 Random Forest 2 mtry
## 0.8690291 0.7557085 Random Forest 10 mtry
## 0.8592721 0.7405882 Random Forest 19 mtry
##
## Tuning parameter 'mtry' was held constant at a value of 10
## Accuracy was used to select the optimal model using the largest value.
## The final value used for the model was mtry = 10.
Valores óptimos:
# se muestran
datatable(validacion_max[nrow(validacion_max),])
Aplicación y resultados de Random Forest:
# se muestra la evolución de árboles del modelo
rf_segment
##
## Call:
## randomForest(formula = y_train ~ ., data = rto_fin_abandono_train, ntree = 100, mtry = validacion_max[nrow(validacion_max), "Valor"])
## Type of random forest: classification
## Number of trees: 100
## No. of variables tried at each split: 10
##
## OOB estimate of error rate: 13.35%
## Confusion matrix:
## 1 2 3 4 class.error
## 1 5645 510 14 29 0.08922233
## 2 333 14131 196 59 0.03994837
## 3 54 1598 215 298 0.90069284
## 4 29 97 80 1412 0.12731768
plot(rf_segment)
Importancia de las variables del nuevo modelo:
# importancia de variables del modelo
varImpPlot(rf_segment, sort = T, main = "Variable Importance Plot", n.var = 10)
#confusion_test =
table(observed = y_test, predicted = pred_rf)
## predicted
## observed 1 2 3 4
## 1 1412 124 2 11
## 2 105 3523 38 14
## 3 12 407 49 73
## 4 6 30 15 354
# se exportan resultados a latex
# print(xtable(confusion_test), include.rownames = TRUE)
print(paste0('La bondad de la predicción del conjunto de test es del ', round(100*aciertos_rf, 2), '%.'))
## [1] "La bondad de la predicción del conjunto de test es del 86.45%."
El resumen comparativo de los resultados obtenidos:
# Comparación clasificación-predicción
comparacion = data.frame(
perfil = c('dropout',
'dropout',
'common_graduate',
'common_graduate',
'motivated',
'motivated',
'dissatisfied',
'dissatisfied'
),
método = c('clasificación',
'predicción',
'clasificación',
'predicción',
'clasificación',
'predicción',
'clasificación',
'predicción'
),
"proporción" = c(paste0(nrow(perfil_1),
" (", round(100*nrow(perfil_1)/nrow(rto_fin_abandono), 2), "%)"),
paste0(nrow(perfil_1_pre),
" (", round(100*nrow(perfil_1_pre)/nrow(rto_progreso), 2), "%)"),
paste0(nrow(perfil_2),
" (", round(100*nrow(perfil_2)/nrow(rto_fin_abandono), 2), "%)"),
paste0(nrow(perfil_2_pre),
" (", round(100*nrow(perfil_2_pre)/nrow(rto_progreso), 2), "%)"),
paste0(nrow(perfil_3),
" (", round(100*nrow(perfil_3)/nrow(rto_fin_abandono), 2), "%)"),
paste0(nrow(perfil_3_pre),
" (", round(100*nrow(perfil_3_pre)/nrow(rto_progreso), 2), "%)"),
paste0(nrow(perfil_4),
" (", round(100*nrow(perfil_4)/nrow(rto_fin_abandono), 2), "%)"),
paste0(nrow(perfil_4_pre),
" (", round(100*nrow(perfil_4_pre)/nrow(rto_progreso), 2), "%)")
),
't_rec' = comparacion_item('t_rec'),
# 't_sup_req' = comparacion_item('t_sup_req'),
# 'titulado' = comparacion_item('titulado'),
# 'n_nodos_fin_titulacion' = comparacion_item('n_nodos_fin_titulacion'),
'nota_media' = comparacion_item('nota_media'),
'tasa_eficiencia' = comparacion_item('tasa_eficiencia'),
't_exito' = comparacion_item('t_exito'),
't_evaluacion' = comparacion_item('t_evaluacion'),
'sa_asig_participacion' = comparacion_item('sa_asig_participacion'),
'sa_asig_docente' = comparacion_item('sa_asig_docente'),
'sa_asig_aprendiendo' = comparacion_item('sa_asig_aprendiendo'),
'sa_curso_participacion' = comparacion_item('sa_curso_participacion'),
'sa_curso_titulacion' = comparacion_item('sa_curso_titulacion')
)
comparacion = data.frame(
perfil = c('dropout',
'dropout',
'common_graduate',
'common_graduate',
'motivated',
'motivated',
'dissatisfied',
'dissatisfied'
),
método = c('clasificación',
'predicción',
'clasificación',
'predicción',
'clasificación',
'predicción',
'clasificación',
'predicción'
),
"proporción" = c(paste0(nrow(perfil_1),
" (", round(100*nrow(perfil_1)/nrow(rto_fin_abandono), 2), "%)"),
paste0(nrow(perfil_1_pre),
" (", round(100*nrow(perfil_1_pre)/nrow(rto_progreso), 2), "%)"),
paste0(nrow(perfil_2),
" (", round(100*nrow(perfil_2)/nrow(rto_fin_abandono), 2), "%)"),
paste0(nrow(perfil_2_pre),
" (", round(100*nrow(perfil_2_pre)/nrow(rto_progreso), 2), "%)"),
paste0(nrow(perfil_3),
" (", round(100*nrow(perfil_3)/nrow(rto_fin_abandono), 2), "%)"),
paste0(nrow(perfil_3_pre),
" (", round(100*nrow(perfil_3_pre)/nrow(rto_progreso), 2), "%)"),
paste0(nrow(perfil_4),
" (", round(100*nrow(perfil_4)/nrow(rto_fin_abandono), 2), "%)"),
paste0(nrow(perfil_4_pre),
" (", round(100*nrow(perfil_4_pre)/nrow(rto_progreso), 2), "%)")
),
't_rec' = comparacion_item('t_rec'),
# 't_sup_req' = comparacion_item('t_sup_req'),
# 'titulado' = comparacion_item('titulado'),
# 'n_nodos_fin_titulacion' = comparacion_item('n_nodos_fin_titulacion'),
'nota_media' = comparacion_item('nota_media'),
'tasa_eficiencia' = comparacion_item('tasa_eficiencia'),
't_exito' = comparacion_item('t_exito'),
't_evaluacion' = comparacion_item('t_evaluacion'),
'sa_asig_participacion' = comparacion_item('sa_asig_participacion'),
'sa_asig_docente' = comparacion_item('sa_asig_docente'),
'sa_asig_aprendiendo' = comparacion_item('sa_asig_aprendiendo'),
'sa_curso_participacion' = comparacion_item('sa_curso_participacion'),
'sa_curso_titulacion' = comparacion_item('sa_curso_titulacion')
)
comparacion_t = data.frame(t(comparacion[-1]))
# Añadimos los nombres de las columnas
colnames(comparacion_t) = comparacion[, 1]
# se muestran resultados
datatable(comparacion_t)
# se exportan resultados a latex
# print(xtable(comparacion_t), include.rownames = TRUE)
Y a continuación se muestran las características que definen a estudiantes en progreso.
El 59.59% del estudiantado en progreso analizado pertenece a esta categoría (en la clasificación era del 25.09%). Se caracteriza por:
con tasas de rendimiento (eficiencia, éxito y evaluación) superiores al 56% (en la clasificación eran del 41%);
reconocer un 4.37% de los requeridos (en la clasificación era de 3.92);
obtener una nota media de 7.42 (en la clasificación era de 7.56);
con participación en las encuestas de asignaturas (14.43%) y curso (13.98%) y satisfacción media manifestada (media de 4.3 en asignatura. En la clasificación era de 4.27).
A continuación se muestra el detalle la información descriptiva del perfil del estudiantado, incluyendo gráficos para cada variable, las frecuencias para cada valor y las etiquetas de las variables.
# https://cran.r-project.org/web/packages/summarytools/vignettes/rmarkdown.html#using-dfsummary-in-r-markdown
# se visualiza
dfSummary(perfil_1_pre,
plain.ascii = FALSE,
style = 'grid',
graph.magnif = 0.85,
varnumbers = FALSE,
valid.col = FALSE,
tmp.img.dir = "/tmp")
Dimensions: 4761 x 70
Duplicates: 11
| Variable | Stats / Values | Freqs (% of Valid) | Graph | Missing |
|---|---|---|---|---|
| ste_codalf [numeric] |
Min : 0 Mean : 0.4 Max : 1 |
0 : 2708 (56.9%) 1 : 2053 (43.1%) |
0 (0.0%) |
|
| sexo [numeric] |
Min : 0 Mean : 0.6 Max : 1 |
0 : 2115 (44.4%) 1 : 2646 (55.6%) |
0 (0.0%) |
|
| nacionalidad [numeric] |
Min : 0 Mean : 0.9 Max : 1 |
0 : 671 (14.1%) 1 : 4090 (85.9%) |
0 (0.0%) |
|
| titulado [numeric] |
1 distinct value | 0 : 4761 (100.0%) | 0 (0.0%) |
|
| tasa_eficiencia [numeric] |
Mean (sd) : 55.6 (32.9) min < med < max: 0 < 60 < 100 IQR (CV) : 50 (0.6) |
538 distinct values | 0 (0.0%) |
|
| t_exito [numeric] |
Mean (sd) : 73.3 (35.1) min < med < max: 0 < 88.9 < 100 IQR (CV) : 40 (0.5) |
311 distinct values | 0 (0.0%) |
|
| t_evaluacion [numeric] |
Mean (sd) : 66.6 (32.2) min < med < max: 0 < 76.7 < 100 IQR (CV) : 45.7 (0.5) |
516 distinct values | 0 (0.0%) |
|
| t_rec [numeric] |
Mean (sd) : 4.4 (11.4) min < med < max: 0 < 0 < 87.5 IQR (CV) : 0 (2.6) |
61 distinct values | 0 (0.0%) |
|
| t_sup_req [numeric] |
Mean (sd) : 36.8 (30.7) min < med < max: 0 < 30 < 113.3 IQR (CV) : 50 (0.8) |
128 distinct values | 0 (0.0%) |
|
| edad_inicio [numeric] |
Mean (sd) : 31.9 (9.3) min < med < max: 17 < 29 < 75 IQR (CV) : 13 (0.3) |
55 distinct values | 0 (0.0%) |
|
| acceso [numeric] |
Min : 0 Mean : 0.6 Max : 1 |
0 : 1970 (41.4%) 1 : 2791 (58.6%) |
0 (0.0%) |
|
| complementos [numeric] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 4373 (91.9%) 1 : 388 ( 8.1%) |
0 (0.0%) |
|
| tasa_abandono [numeric] |
1 distinct value | 0 : 4761 (100.0%) | 0 (0.0%) |
|
| traslado_expediente [numeric] |
Min : 0 Mean : 0 Max : 1 |
0 : 4714 (99.0%) 1 : 47 ( 1.0%) |
0 (0.0%) |
|
| n_nodos_fin_titulacion [numeric] |
1 distinct value | 0 : 4761 (100.0%) | 0 (0.0%) |
|
| duracion_media_estudios [numeric] |
Mean (sd) : 2.2 (1.6) min < med < max: 1 < 2 < 12 IQR (CV) : 1 (0.7) |
12 distinct values | 0 (0.0%) |
|
| nota_media [numeric] |
Mean (sd) : 7.4 (0.8) min < med < max: 5 < 7.5 < 10 IQR (CV) : 1.1 (0.1) |
1852 distinct values | 0 (0.0%) |
|
| sa_asig_R [numeric] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 4393 (92.3%) 1 : 368 ( 7.7%) |
0 (0.0%) |
|
| sa_asig_participacion [numeric] |
Mean (sd) : 14.4 (28.7) min < med < max: 0 < 0 < 100 IQR (CV) : 10.7 (2) |
266 distinct values | 0 (0.0%) |
|
| sa_asig_organizacion [numeric] |
Mean (sd) : 4.4 (0.3) min < med < max: 1 < 4.3 < 5 IQR (CV) : 0 (0.1) |
102 distinct values | 0 (0.0%) |
|
| sa_asig_manual [numeric] |
Mean (sd) : 4.1 (0.4) min < med < max: 1 < 4 < 5 IQR (CV) : 0 (0.1) |
135 distinct values | 0 (0.0%) |
|
| sa_asig_materiales [numeric] |
Mean (sd) : 4.2 (0.3) min < med < max: 1 < 4.2 < 5 IQR (CV) : 0 (0.1) |
115 distinct values | 0 (0.0%) |
|
| sa_asig_actividades [numeric] |
Mean (sd) : 4.3 (0.3) min < med < max: 1 < 4.3 < 5 IQR (CV) : 0 (0.1) |
125 distinct values | 0 (0.0%) |
|
| sa_asig_docente [numeric] |
Mean (sd) : 4.5 (0.3) min < med < max: 1 < 4.4 < 5 IQR (CV) : 0 (0.1) |
114 distinct values | 0 (0.0%) |
|
| sa_asig_aprendiendo [numeric] |
Mean (sd) : 89.7 (10.8) min < med < max: 5.3 < 90.9 < 100 IQR (CV) : 0 (0.1) |
98 distinct values | 0 (0.0%) |
|
| sa_asig_comentarios [numeric] |
Mean (sd) : 0 (0.1) min < med < max: -0.5 < 0 < 1 IQR (CV) : 0 (4.2) |
85 distinct values | 0 (0.0%) |
|
| sa_curso_R [numeric] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 4330 (90.9%) 1 : 431 ( 9.1%) |
0 (0.0%) |
|
| sa_curso_participacion [numeric] |
Mean (sd) : 14 (31) min < med < max: 0 < 0 < 100 IQR (CV) : 0 (2.2) |
11 distinct values | 0 (0.0%) |
|
| sa_curso_nivel_academico [numeric] |
Mean (sd) : 4 (0.4) min < med < max: 1 < 4 < 5 IQR (CV) : 0 (0.1) |
22 distinct values | 0 (0.0%) |
|
| sa_curso_implicacion [numeric] |
Mean (sd) : 4.6 (0.4) min < med < max: 1 < 4.7 < 5 IQR (CV) : 0 (0.1) |
18 distinct values | 0 (0.0%) |
|
| sa_curso_aprovechamiento_recursos [numeric] |
Mean (sd) : 4 (0.4) min < med < max: 1 < 4 < 5 IQR (CV) : 0 (0.1) |
22 distinct values | 0 (0.0%) |
|
| sa_curso_titulacion [numeric] |
Mean (sd) : 4 (0.5) min < med < max: 1 < 4 < 5 IQR (CV) : 0 (0.1) |
23 distinct values | 0 (0.0%) |
|
| sa_curso_recomendacion [numeric] |
Mean (sd) : 99.4 (5.1) min < med < max: 25 < 100 < 100 IQR (CV) : 0 (0.1) |
25.00 : 1 ( 0.0%) 33.33 : 3 ( 0.1%) 40.00 : 2 ( 0.0%) 50.00 : 30 ( 0.6%) 60.00 : 1 ( 0.0%) 66.67 : 17 ( 0.4%) 75.00 : 6 ( 0.1%) 80.00 : 4 ( 0.1%) 100.00 : 4697 (98.7%) |
0 (0.0%) |
|
| sa_curso_comentarios [numeric] |
Mean (sd) : 0 (0) min < med < max: -1 < 0 < 0.7 IQR (CV) : 0 (7.5) |
70 distinct values | 0 (0.0%) |
|
| sa_titulacion_R [numeric] |
1 distinct value | 0 : 4761 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_participacion [numeric] |
1 distinct value | 0 : 4761 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_nivel_academico [numeric] |
1 distinct value | 4 : 4761 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_implicacion [numeric] |
1 distinct value | 5 : 4761 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_aprovechamiento_recursos [numeric] |
1 distinct value | 4 : 4761 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_mejora_profesional [numeric] |
1 distinct value | 4 : 4761 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_obtener_trabajo [numeric] |
1 distinct value | 3 : 4761 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_titulacion [numeric] |
1 distinct value | 4 : 4761 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_recomendacion [numeric] |
1 distinct value | 100 : 4761 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_comentarios [numeric] |
1 distinct value | 0 : 4761 (100.0%) | 0 (0.0%) |
|
| il_R [numeric] |
1 distinct value | 0 : 4761 (100.0%) | 0 (0.0%) |
|
| il_participacion [numeric] |
1 distinct value | 0 : 4761 (100.0%) | 0 (0.0%) |
|
| il_motivo_estudios [numeric] |
1 distinct value | 0 : 4761 (100.0%) | 0 (0.0%) |
|
| il_consecuencia_estudios [numeric] |
1 distinct value | 0 : 4761 (100.0%) | 0 (0.0%) |
|
| il_trabajo_actual [numeric] |
1 distinct value | 0 : 4761 (100.0%) | 0 (0.0%) |
|
| il_trabajo_actual_relacionado_estudios [numeric] |
1 distinct value | 0 : 4761 (100.0%) | 0 (0.0%) |
|
| il_comentarios [numeric] |
1 distinct value | 0 : 4761 (100.0%) | 0 (0.0%) |
|
| dias_laborable [numeric] |
Mean (sd) : 59.4 (13.8) min < med < max: 0 < 61.2 < 100 IQR (CV) : 7.6 (0.2) |
2095 distinct values | 0 (0.0%) |
|
| dias_festivo [numeric] |
Mean (sd) : 40.6 (13.8) min < med < max: 0 < 38.8 < 100 IQR (CV) : 7.6 (0.3) |
2095 distinct values | 0 (0.0%) |
|
| horario_mañana [numeric] |
Mean (sd) : 26.3 (14.4) min < med < max: 0 < 25.3 < 100 IQR (CV) : 8.1 (0.5) |
2135 distinct values | 0 (0.0%) |
|
| horario_tarde [numeric] |
Mean (sd) : 51.9 (13.9) min < med < max: 0 < 52.2 < 100 IQR (CV) : 7.4 (0.3) |
2108 distinct values | 0 (0.0%) |
|
| horario_noche [numeric] |
Mean (sd) : 20.3 (14.1) min < med < max: 0 < 18.3 < 100 IQR (CV) : 9.2 (0.7) |
2087 distinct values | 0 (0.0%) |
|
| cen_codnum_11416 [integer] |
Min : 0 Mean : 0.2 Max : 1 |
0 : 3950 (83.0%) 1 : 811 (17.0%) |
0 (0.0%) |
|
| cen_codnum_11417 [integer] |
Min : 0 Mean : 0.3 Max : 1 |
0 : 3312 (69.6%) 1 : 1449 (30.4%) |
0 (0.0%) |
|
| cen_codnum_11418 [integer] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 4337 (91.1%) 1 : 424 ( 8.9%) |
0 (0.0%) |
|
| cen_codnum_11419 [integer] |
Min : 0 Mean : 0.3 Max : 1 |
0 : 3269 (68.7%) 1 : 1492 (31.3%) |
0 (0.0%) |
|
| cen_codnum_11420 [integer] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 4176 (87.7%) 1 : 585 (12.3%) |
0 (0.0%) |
|
| any_anyaca_acceso_1965-80 [integer] |
Min : 0 Mean : 0 Max : 1 |
0 : 4740 (99.6%) 1 : 21 ( 0.4%) |
0 (0.0%) |
|
| any_anyaca_acceso_1981-95 [integer] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 4464 (93.8%) 1 : 297 ( 6.2%) |
0 (0.0%) |
|
| any_anyaca_acceso_1996-2010 [integer] |
Min : 0 Mean : 0.3 Max : 1 |
0 : 3523 (74.0%) 1 : 1238 (26.0%) |
0 (0.0%) |
|
| any_anyaca_acceso_2011-25 [integer] |
Min : 0 Mean : 0.7 Max : 1 |
0 : 1556 (32.7%) 1 : 3205 (67.3%) |
0 (0.0%) |
|
| any_anyaca_inicio_2008-13 [integer] |
Min : 0 Mean : 0 Max : 1 |
0 : 4591 (96.4%) 1 : 170 ( 3.6%) |
0 (0.0%) |
|
| any_anyaca_inicio_2014-19 [integer] |
Min : 0 Mean : 0.5 Max : 1 |
0 : 2203 (46.3%) 1 : 2558 (53.7%) |
0 (0.0%) |
|
| any_anyaca_inicio_2020-25 [integer] |
Min : 0 Mean : 0.4 Max : 1 |
0 : 2728 (57.3%) 1 : 2033 (42.7%) |
0 (0.0%) |
|
| pred_rf [factor] |
1. 1 2. 2 3. 3 4. 4 |
4761 (100.0%) 0 ( 0.0%) 0 ( 0.0%) 0 ( 0.0%) |
0 (0.0%) |
|
| etiqueta [character] |
1. dropout | 4761 (100.0%) | 0 (0.0%) |
El 30.84% del estudiantado en progreso analizado pertenece a esta categoría (en la clasificación era del 59.59%). Se caracteriza por:
con tasas de rendimiento (eficiencia, éxito y evaluación) superiores al 91% (en la clasificación eran del 97%);
reconocer un 12.29% de los requeridos (en la clasificación era de 7.87);
obtener una nota media de 7.7 (en la clasificación era de 8.04);
con participación en las encuestas de asignaturas (26.23%) y curso (33.18%) y satisfacción media manifestada (media de 4.37 en asignatura. En la clasificación era de 4.3).
A continuación se muestra el detalle la información descriptiva del perfil del estudiantado, incluyendo gráficos para cada variable, las frecuencias para cada valor y las etiquetas de las variables.
# se visualiza
dfSummary(perfil_2_pre,
plain.ascii = FALSE,
style = 'grid',
graph.magnif = 0.85,
varnumbers = FALSE,
valid.col = FALSE,
tmp.img.dir = "/tmp")
Dimensions: 2464 x 70
Duplicates: 0
| Variable | Stats / Values | Freqs (% of Valid) | Graph | Missing |
|---|---|---|---|---|
| ste_codalf [numeric] |
Min : 0 Mean : 0.5 Max : 1 |
0 : 1122 (45.5%) 1 : 1342 (54.5%) |
0 (0.0%) |
|
| sexo [numeric] |
Min : 0 Mean : 0.6 Max : 1 |
0 : 952 (38.6%) 1 : 1512 (61.4%) |
0 (0.0%) |
|
| nacionalidad [numeric] |
Min : 0 Mean : 0.9 Max : 1 |
0 : 300 (12.2%) 1 : 2164 (87.8%) |
0 (0.0%) |
|
| titulado [numeric] |
1 distinct value | 0 : 2464 (100.0%) | 0 (0.0%) |
|
| tasa_eficiencia [numeric] |
Mean (sd) : 90.6 (10.8) min < med < max: 52.5 < 92.9 < 100 IQR (CV) : 16.1 (0.1) |
260 distinct values | 0 (0.0%) |
|
| t_exito [numeric] |
Mean (sd) : 96 (6.9) min < med < max: 60 < 100 < 100 IQR (CV) : 6.2 (0.1) |
150 distinct values | 0 (0.0%) |
|
| t_evaluacion [numeric] |
Mean (sd) : 94.3 (8.7) min < med < max: 56.7 < 100 < 100 IQR (CV) : 10 (0.1) |
199 distinct values | 0 (0.0%) |
|
| t_rec [numeric] |
Mean (sd) : 12.3 (17.3) min < med < max: 0 < 2.5 < 86.7 IQR (CV) : 20 (1.4) |
67 distinct values | 0 (0.0%) |
|
| t_sup_req [numeric] |
Mean (sd) : 67.7 (24.4) min < med < max: 5 < 68.1 < 130 IQR (CV) : 37.5 (0.4) |
123 distinct values | 0 (0.0%) |
|
| edad_inicio [numeric] |
Mean (sd) : 31.8 (8.9) min < med < max: 17 < 29 < 73 IQR (CV) : 13 (0.3) |
50 distinct values | 0 (0.0%) |
|
| acceso [numeric] |
Min : 0 Mean : 0.7 Max : 1 |
0 : 855 (34.7%) 1 : 1609 (65.3%) |
0 (0.0%) |
|
| complementos [numeric] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 2191 (88.9%) 1 : 273 (11.1%) |
0 (0.0%) |
|
| tasa_abandono [numeric] |
1 distinct value | 0 : 2464 (100.0%) | 0 (0.0%) |
|
| traslado_expediente [numeric] |
Min : 0 Mean : 0 Max : 1 |
0 : 2460 (99.8%) 1 : 4 ( 0.2%) |
0 (0.0%) |
|
| n_nodos_fin_titulacion [numeric] |
1 distinct value | 0 : 2464 (100.0%) | 0 (0.0%) |
|
| duracion_media_estudios [numeric] |
Mean (sd) : 2.6 (1.6) min < med < max: 1 < 2 < 13 IQR (CV) : 1 (0.6) |
11 distinct values | 0 (0.0%) |
|
| nota_media [numeric] |
Mean (sd) : 7.7 (0.8) min < med < max: 5.4 < 7.7 < 9.7 IQR (CV) : 1.1 (0.1) |
1547 distinct values | 0 (0.0%) |
|
| sa_asig_R [numeric] |
Min : 0 Mean : 0.2 Max : 1 |
0 : 2069 (84.0%) 1 : 395 (16.0%) |
0 (0.0%) |
|
| sa_asig_participacion [numeric] |
Mean (sd) : 26.2 (35.4) min < med < max: 0 < 0 < 100 IQR (CV) : 50 (1.3) |
234 distinct values | 0 (0.0%) |
|
| sa_asig_organizacion [numeric] |
Mean (sd) : 4.5 (0.3) min < med < max: 2 < 4.3 < 5 IQR (CV) : 0.3 (0.1) |
98 distinct values | 0 (0.0%) |
|
| sa_asig_manual [numeric] |
Mean (sd) : 4.2 (0.4) min < med < max: 1 < 4 < 5 IQR (CV) : 0.3 (0.1) |
138 distinct values | 0 (0.0%) |
|
| sa_asig_materiales [numeric] |
Mean (sd) : 4.3 (0.4) min < med < max: 2.5 < 4.2 < 5 IQR (CV) : 0.3 (0.1) |
113 distinct values | 0 (0.0%) |
|
| sa_asig_actividades [numeric] |
Mean (sd) : 4.4 (0.3) min < med < max: 2 < 4.3 < 5 IQR (CV) : 0.2 (0.1) |
105 distinct values | 0 (0.0%) |
|
| sa_asig_docente [numeric] |
Mean (sd) : 4.5 (0.3) min < med < max: 2 < 4.4 < 5 IQR (CV) : 0.3 (0.1) |
97 distinct values | 0 (0.0%) |
|
| sa_asig_aprendiendo [numeric] |
Mean (sd) : 89.9 (12.2) min < med < max: 9.1 < 90.9 < 100 IQR (CV) : 9.1 (0.1) |
97 distinct values | 0 (0.0%) |
|
| sa_asig_comentarios [numeric] |
Mean (sd) : 0 (0.1) min < med < max: -0.8 < 0 < 1 IQR (CV) : 0 (2.7) |
79 distinct values | 0 (0.0%) |
|
| sa_curso_R [numeric] |
Min : 0 Mean : 0.2 Max : 1 |
0 : 1891 (76.7%) 1 : 573 (23.3%) |
0 (0.0%) |
|
| sa_curso_participacion [numeric] |
Mean (sd) : 33.2 (41.8) min < med < max: 0 < 0 < 100 IQR (CV) : 66.7 (1.3) |
11 distinct values | 0 (0.0%) |
|
| sa_curso_nivel_academico [numeric] |
Mean (sd) : 4.1 (0.5) min < med < max: 1 < 4 < 5 IQR (CV) : 0 (0.1) |
25 distinct values | 0 (0.0%) |
|
| sa_curso_implicacion [numeric] |
Mean (sd) : 4.6 (0.4) min < med < max: 1 < 4.7 < 5 IQR (CV) : 0 (0.1) |
14 distinct values | 0 (0.0%) |
|
| sa_curso_aprovechamiento_recursos [numeric] |
Mean (sd) : 4.1 (0.5) min < med < max: 1 < 4 < 5 IQR (CV) : 0 (0.1) |
22 distinct values | 0 (0.0%) |
|
| sa_curso_titulacion [numeric] |
Mean (sd) : 4.1 (0.6) min < med < max: 1 < 4 < 5 IQR (CV) : 0 (0.1) |
23 distinct values | 0 (0.0%) |
|
| sa_curso_recomendacion [numeric] |
Mean (sd) : 98.7 (7.7) min < med < max: 25 < 100 < 100 IQR (CV) : 0 (0.1) |
25.00 : 1 ( 0.0%) 33.33 : 6 ( 0.2%) 50.00 : 37 ( 1.5%) 60.00 : 2 ( 0.1%) 66.67 : 13 ( 0.5%) 75.00 : 8 ( 0.3%) 80.00 : 5 ( 0.2%) 100.00 : 2392 (97.1%) |
0 (0.0%) |
|
| sa_curso_comentarios [numeric] |
Mean (sd) : 0 (0.1) min < med < max: -1 < 0 < 1 IQR (CV) : 0 (4) |
79 distinct values | 0 (0.0%) |
|
| sa_titulacion_R [numeric] |
1 distinct value | 0 : 2464 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_participacion [numeric] |
1 distinct value | 0 : 2464 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_nivel_academico [numeric] |
1 distinct value | 4 : 2464 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_implicacion [numeric] |
1 distinct value | 5 : 2464 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_aprovechamiento_recursos [numeric] |
1 distinct value | 4 : 2464 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_mejora_profesional [numeric] |
1 distinct value | 4 : 2464 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_obtener_trabajo [numeric] |
1 distinct value | 3 : 2464 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_titulacion [numeric] |
1 distinct value | 4 : 2464 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_recomendacion [numeric] |
1 distinct value | 100 : 2464 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_comentarios [numeric] |
1 distinct value | 0 : 2464 (100.0%) | 0 (0.0%) |
|
| il_R [numeric] |
1 distinct value | 0 : 2464 (100.0%) | 0 (0.0%) |
|
| il_participacion [numeric] |
1 distinct value | 0 : 2464 (100.0%) | 0 (0.0%) |
|
| il_motivo_estudios [numeric] |
1 distinct value | 0 : 2464 (100.0%) | 0 (0.0%) |
|
| il_consecuencia_estudios [numeric] |
1 distinct value | 0 : 2464 (100.0%) | 0 (0.0%) |
|
| il_trabajo_actual [numeric] |
1 distinct value | 0 : 2464 (100.0%) | 0 (0.0%) |
|
| il_trabajo_actual_relacionado_estudios [numeric] |
1 distinct value | 0 : 2464 (100.0%) | 0 (0.0%) |
|
| il_comentarios [numeric] |
1 distinct value | 0 : 2464 (100.0%) | 0 (0.0%) |
|
| dias_laborable [numeric] |
Mean (sd) : 60.5 (13.4) min < med < max: 0 < 61.2 < 100 IQR (CV) : 8 (0.2) |
1203 distinct values | 0 (0.0%) |
|
| dias_festivo [numeric] |
Mean (sd) : 39.5 (13.4) min < med < max: 0 < 38.8 < 100 IQR (CV) : 8 (0.3) |
1203 distinct values | 0 (0.0%) |
|
| horario_mañana [numeric] |
Mean (sd) : 27.3 (14.8) min < med < max: 0 < 25.3 < 100 IQR (CV) : 8.4 (0.5) |
1224 distinct values | 0 (0.0%) |
|
| horario_tarde [numeric] |
Mean (sd) : 51.7 (14.1) min < med < max: 0 < 52.2 < 100 IQR (CV) : 6.7 (0.3) |
1219 distinct values | 0 (0.0%) |
|
| horario_noche [numeric] |
Mean (sd) : 19.6 (14.2) min < med < max: 0 < 18.3 < 100 IQR (CV) : 9.2 (0.7) |
1182 distinct values | 0 (0.0%) |
|
| cen_codnum_11416 [integer] |
Min : 0 Mean : 0.2 Max : 1 |
0 : 2088 (84.7%) 1 : 376 (15.3%) |
0 (0.0%) |
|
| cen_codnum_11417 [integer] |
Min : 0 Mean : 0.4 Max : 1 |
0 : 1583 (64.2%) 1 : 881 (35.8%) |
0 (0.0%) |
|
| cen_codnum_11418 [integer] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 2332 (94.6%) 1 : 132 ( 5.4%) |
0 (0.0%) |
|
| cen_codnum_11419 [integer] |
Min : 0 Mean : 0.4 Max : 1 |
0 : 1557 (63.2%) 1 : 907 (36.8%) |
0 (0.0%) |
|
| cen_codnum_11420 [integer] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 2296 (93.2%) 1 : 168 ( 6.8%) |
0 (0.0%) |
|
| any_anyaca_acceso_1965-80 [integer] |
Min : 0 Mean : 0 Max : 1 |
0 : 2460 (99.8%) 1 : 4 ( 0.2%) |
0 (0.0%) |
|
| any_anyaca_acceso_1981-95 [integer] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 2332 (94.6%) 1 : 132 ( 5.4%) |
0 (0.0%) |
|
| any_anyaca_acceso_1996-2010 [integer] |
Min : 0 Mean : 0.3 Max : 1 |
0 : 1787 (72.5%) 1 : 677 (27.5%) |
0 (0.0%) |
|
| any_anyaca_acceso_2011-25 [integer] |
Min : 0 Mean : 0.7 Max : 1 |
0 : 813 (33.0%) 1 : 1651 (67.0%) |
0 (0.0%) |
|
| any_anyaca_inicio_2008-13 [integer] |
Min : 0 Mean : 0 Max : 1 |
0 : 2413 (97.9%) 1 : 51 ( 2.1%) |
0 (0.0%) |
|
| any_anyaca_inicio_2014-19 [integer] |
Min : 0 Mean : 0.5 Max : 1 |
0 : 1170 (47.5%) 1 : 1294 (52.5%) |
0 (0.0%) |
|
| any_anyaca_inicio_2020-25 [integer] |
Min : 0 Mean : 0.5 Max : 1 |
0 : 1345 (54.6%) 1 : 1119 (45.4%) |
0 (0.0%) |
|
| pred_rf [factor] |
1. 1 2. 2 3. 3 4. 4 |
0 ( 0.0%) 2464 (100.0%) 0 ( 0.0%) 0 ( 0.0%) |
0 (0.0%) |
|
| etiqueta [character] |
1. common_graduate | 2464 (100.0%) | 0 (0.0%) |
El 1.11% del estudiantado en progreso analizado pertenece a esta categoría (en la clasificación era del 8.76%). Se caracteriza por:
con tasas de rendimiento (eficiencia, éxito y evaluación) superiores al 93% (en la clasificación eran del 97%);
reconocer un 12.34% de los requeridos (en la clasificación era de 9.27);
obtener una nota media de 7.79 (en la clasificación era de 8.03);
con participación en las encuestas de asignaturas (57.85%) y curso (73.69%) y satisfacción media manifestada (media de 4.19 en asignatura. En la clasificación era de 4.22).
A continuación se muestra el detalle la información descriptiva del perfil del estudiantado, incluyendo gráficos para cada variable, las frecuencias para cada valor y las etiquetas de las variables.
# se visualiza
dfSummary(perfil_3_pre,
plain.ascii = FALSE,
style = 'grid',
graph.magnif = 0.85,
varnumbers = FALSE,
valid.col = FALSE,
tmp.img.dir = "/tmp")
Dimensions: 89 x 70
Duplicates: 0
| Variable | Stats / Values | Freqs (% of Valid) | Graph | Missing |
|---|---|---|---|---|
| ste_codalf [numeric] |
Min : 0 Mean : 0.5 Max : 1 |
0 : 45 (50.6%) 1 : 44 (49.4%) |
0 (0.0%) |
|
| sexo [numeric] |
Min : 0 Mean : 0.6 Max : 1 |
0 : 34 (38.2%) 1 : 55 (61.8%) |
0 (0.0%) |
|
| nacionalidad [numeric] |
Min : 0 Mean : 0.9 Max : 1 |
0 : 12 (13.5%) 1 : 77 (86.5%) |
0 (0.0%) |
|
| titulado [numeric] |
1 distinct value | 0 : 89 (100.0%) | 0 (0.0%) |
|
| tasa_eficiencia [numeric] |
Mean (sd) : 93.1 (8.7) min < med < max: 68.3 < 100 < 100 IQR (CV) : 12.8 (0.1) |
30 distinct values | 0 (0.0%) |
|
| t_exito [numeric] |
Mean (sd) : 96.8 (5.9) min < med < max: 79.2 < 100 < 100 IQR (CV) : 5.6 (0.1) |
18 distinct values | 0 (0.0%) |
|
| t_evaluacion [numeric] |
Mean (sd) : 96.2 (6.9) min < med < max: 70.6 < 100 < 100 IQR (CV) : 6.2 (0.1) |
21 distinct values | 0 (0.0%) |
|
| t_rec [numeric] |
Mean (sd) : 12.3 (16.1) min < med < max: 0 < 5 < 60 IQR (CV) : 22.5 (1.3) |
25 distinct values | 0 (0.0%) |
|
| t_sup_req [numeric] |
Mean (sd) : 65.4 (25.5) min < med < max: 5 < 68.3 < 120 IQR (CV) : 39.2 (0.4) |
39 distinct values | 0 (0.0%) |
|
| edad_inicio [numeric] |
Mean (sd) : 37.2 (10.6) min < med < max: 17 < 38 < 69 IQR (CV) : 18 (0.3) |
36 distinct values | 0 (0.0%) |
|
| acceso [numeric] |
Min : 0 Mean : 0.6 Max : 1 |
0 : 34 (38.2%) 1 : 55 (61.8%) |
0 (0.0%) |
|
| complementos [numeric] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 84 (94.4%) 1 : 5 ( 5.6%) |
0 (0.0%) |
|
| tasa_abandono [numeric] |
1 distinct value | 0 : 89 (100.0%) | 0 (0.0%) |
|
| traslado_expediente [numeric] |
1 distinct value | 0 : 89 (100.0%) | 0 (0.0%) |
|
| n_nodos_fin_titulacion [numeric] |
1 distinct value | 0 : 89 (100.0%) | 0 (0.0%) |
|
| duracion_media_estudios [numeric] |
Mean (sd) : 2.8 (1.8) min < med < max: 1 < 2 < 10 IQR (CV) : 1 (0.7) |
1 : 12 (13.5%) 2 : 49 (55.1%) 3 : 9 (10.1%) 4 : 6 ( 6.7%) 5 : 6 ( 6.7%) 6 : 1 ( 1.1%) 7 : 2 ( 2.2%) 8 : 2 ( 2.2%) 9 : 1 ( 1.1%) 10 : 1 ( 1.1%) |
0 (0.0%) |
|
| nota_media [numeric] |
Mean (sd) : 7.8 (0.8) min < med < max: 5.6 < 7.7 < 9.9 IQR (CV) : 1.1 (0.1) |
83 distinct values | 0 (0.0%) |
|
| sa_asig_R [numeric] |
Min : 0 Mean : 0.4 Max : 1 |
0 : 52 (58.4%) 1 : 37 (41.6%) |
0 (0.0%) |
|
| sa_asig_participacion [numeric] |
Mean (sd) : 57.8 (35.8) min < med < max: 0 < 60 < 100 IQR (CV) : 68 (0.6) |
45 distinct values | 0 (0.0%) |
|
| sa_asig_organizacion [numeric] |
Mean (sd) : 4.3 (0.4) min < med < max: 3.3 < 4.3 < 5 IQR (CV) : 0.5 (0.1) |
33 distinct values | 0 (0.0%) |
|
| sa_asig_manual [numeric] |
Mean (sd) : 4 (0.6) min < med < max: 2 < 4 < 5 IQR (CV) : 0.6 (0.2) |
42 distinct values | 0 (0.0%) |
|
| sa_asig_materiales [numeric] |
Mean (sd) : 4.2 (0.5) min < med < max: 3 < 4.2 < 5 IQR (CV) : 0.5 (0.1) |
33 distinct values | 0 (0.0%) |
|
| sa_asig_actividades [numeric] |
Mean (sd) : 4.1 (0.5) min < med < max: 2 < 4.2 < 5 IQR (CV) : 0.5 (0.1) |
37 distinct values | 0 (0.0%) |
|
| sa_asig_docente [numeric] |
Mean (sd) : 4.4 (0.4) min < med < max: 3 < 4.4 < 5 IQR (CV) : 0.7 (0.1) |
38 distinct values | 0 (0.0%) |
|
| sa_asig_aprendiendo [numeric] |
Mean (sd) : 75.1 (27) min < med < max: 10 < 90 < 100 IQR (CV) : 50 (0.4) |
30 distinct values | 0 (0.0%) |
|
| sa_asig_comentarios [numeric] |
Mean (sd) : 0.1 (0.1) min < med < max: -0.1 < 0 < 0.4 IQR (CV) : 0.1 (1.6) |
29 distinct values | 0 (0.0%) |
|
| sa_curso_R [numeric] |
Min : 0 Mean : 0.7 Max : 1 |
0 : 31 (34.8%) 1 : 58 (65.2%) |
0 (0.0%) |
|
| sa_curso_participacion [numeric] |
Mean (sd) : 73.7 (39.7) min < med < max: 0 < 100 < 100 IQR (CV) : 50 (0.5) |
0.00 : 16 (18.0%) 20.00 : 1 ( 1.1%) 33.33 : 2 ( 2.2%) 40.00 : 1 ( 1.1%) 50.00 : 7 ( 7.9%) 60.00 : 1 ( 1.1%) 66.67 : 1 ( 1.1%) 75.00 : 1 ( 1.1%) 80.00 : 1 ( 1.1%) 100.00 : 58 (65.2%) |
0 (0.0%) |
|
| sa_curso_nivel_academico [numeric] |
Mean (sd) : 4.1 (0.6) min < med < max: 2 < 4 < 5 IQR (CV) : 1 (0.2) |
11 distinct values | 0 (0.0%) |
|
| sa_curso_implicacion [numeric] |
Mean (sd) : 4.5 (0.6) min < med < max: 3 < 4.7 < 5 IQR (CV) : 1 (0.1) |
3.00 : 6 ( 6.7%) 3.50 : 2 ( 2.2%) 4.00 : 20 (22.5%) 4.33 : 1 ( 1.1%) 4.50 : 4 ( 4.5%) 4.67 : 16 (18.0%) 4.75 : 1 ( 1.1%) 5.00 : 39 (43.8%) |
0 (0.0%) |
|
| sa_curso_aprovechamiento_recursos [numeric] |
Mean (sd) : 4.1 (0.7) min < med < max: 2 < 4 < 5 IQR (CV) : 1 (0.2) |
13 distinct values | 0 (0.0%) |
|
| sa_curso_titulacion [numeric] |
Mean (sd) : 4 (0.8) min < med < max: 1 < 4 < 5 IQR (CV) : 0.5 (0.2) |
12 distinct values | 0 (0.0%) |
|
| sa_curso_recomendacion [numeric] |
Mean (sd) : 94.9 (14.3) min < med < max: 50 < 100 < 100 IQR (CV) : 0 (0.2) |
50.00 : 7 ( 7.9%) 66.67 : 1 ( 1.1%) 75.00 : 2 ( 2.2%) 80.00 : 1 ( 1.1%) 100.00 : 78 (87.6%) |
0 (0.0%) |
|
| sa_curso_comentarios [numeric] |
Mean (sd) : 0 (0.1) min < med < max: -0.3 < 0 < 0.6 IQR (CV) : 0 (3.1) |
25 distinct values | 0 (0.0%) |
|
| sa_titulacion_R [numeric] |
1 distinct value | 0 : 89 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_participacion [numeric] |
1 distinct value | 0 : 89 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_nivel_academico [numeric] |
1 distinct value | 4 : 89 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_implicacion [numeric] |
1 distinct value | 5 : 89 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_aprovechamiento_recursos [numeric] |
1 distinct value | 4 : 89 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_mejora_profesional [numeric] |
1 distinct value | 4 : 89 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_obtener_trabajo [numeric] |
1 distinct value | 3 : 89 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_titulacion [numeric] |
1 distinct value | 4 : 89 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_recomendacion [numeric] |
1 distinct value | 100 : 89 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_comentarios [numeric] |
1 distinct value | 0 : 89 (100.0%) | 0 (0.0%) |
|
| il_R [numeric] |
1 distinct value | 0 : 89 (100.0%) | 0 (0.0%) |
|
| il_participacion [numeric] |
1 distinct value | 0 : 89 (100.0%) | 0 (0.0%) |
|
| il_motivo_estudios [numeric] |
1 distinct value | 0 : 89 (100.0%) | 0 (0.0%) |
|
| il_consecuencia_estudios [numeric] |
1 distinct value | 0 : 89 (100.0%) | 0 (0.0%) |
|
| il_trabajo_actual [numeric] |
1 distinct value | 0 : 89 (100.0%) | 0 (0.0%) |
|
| il_trabajo_actual_relacionado_estudios [numeric] |
1 distinct value | 0 : 89 (100.0%) | 0 (0.0%) |
|
| il_comentarios [numeric] |
1 distinct value | 0 : 89 (100.0%) | 0 (0.0%) |
|
| dias_laborable [numeric] |
Mean (sd) : 62.3 (15.8) min < med < max: 0 < 61.2 < 100 IQR (CV) : 7.6 (0.3) |
57 distinct values | 0 (0.0%) |
|
| dias_festivo [numeric] |
Mean (sd) : 37.7 (15.8) min < med < max: 0 < 38.8 < 100 IQR (CV) : 7.6 (0.4) |
57 distinct values | 0 (0.0%) |
|
| horario_mañana [numeric] |
Mean (sd) : 26.2 (15.6) min < med < max: 0 < 25.3 < 76.6 IQR (CV) : 14 (0.6) |
57 distinct values | 0 (0.0%) |
|
| horario_tarde [numeric] |
Mean (sd) : 55.3 (16.8) min < med < max: 18.8 < 52.2 < 100 IQR (CV) : 13 (0.3) |
60 distinct values | 0 (0.0%) |
|
| horario_noche [numeric] |
Mean (sd) : 17.2 (14.6) min < med < max: 0 < 18.3 < 76.1 IQR (CV) : 10.5 (0.8) |
56 distinct values | 0 (0.0%) |
|
| cen_codnum_11416 [integer] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 81 (91.0%) 1 : 8 ( 9.0%) |
0 (0.0%) |
|
| cen_codnum_11417 [integer] |
Min : 0 Mean : 0.3 Max : 1 |
0 : 66 (74.2%) 1 : 23 (25.8%) |
0 (0.0%) |
|
| cen_codnum_11418 [integer] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 79 (88.8%) 1 : 10 (11.2%) |
0 (0.0%) |
|
| cen_codnum_11419 [integer] |
Min : 0 Mean : 0.4 Max : 1 |
0 : 52 (58.4%) 1 : 37 (41.6%) |
0 (0.0%) |
|
| cen_codnum_11420 [integer] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 78 (87.6%) 1 : 11 (12.4%) |
0 (0.0%) |
|
| any_anyaca_acceso_1965-80 [integer] |
1 distinct value | 0 : 89 (100.0%) | 0 (0.0%) |
|
| any_anyaca_acceso_1981-95 [integer] |
Min : 0 Mean : 0.2 Max : 1 |
0 : 74 (83.1%) 1 : 15 (16.9%) |
0 (0.0%) |
|
| any_anyaca_acceso_1996-2010 [integer] |
Min : 0 Mean : 0.3 Max : 1 |
0 : 63 (70.8%) 1 : 26 (29.2%) |
0 (0.0%) |
|
| any_anyaca_acceso_2011-25 [integer] |
Min : 0 Mean : 0.5 Max : 1 |
0 : 41 (46.1%) 1 : 48 (53.9%) |
0 (0.0%) |
|
| any_anyaca_inicio_2008-13 [integer] |
Min : 0 Mean : 0 Max : 1 |
0 : 85 (95.5%) 1 : 4 ( 4.5%) |
0 (0.0%) |
|
| any_anyaca_inicio_2014-19 [integer] |
Min : 0 Mean : 0.5 Max : 1 |
0 : 47 (52.8%) 1 : 42 (47.2%) |
0 (0.0%) |
|
| any_anyaca_inicio_2020-25 [integer] |
Min : 0 Mean : 0.5 Max : 1 |
0 : 46 (51.7%) 1 : 43 (48.3%) |
0 (0.0%) |
|
| pred_rf [factor] |
1. 1 2. 2 3. 3 4. 4 |
0 ( 0.0%) 0 ( 0.0%) 89 (100.0%) 0 ( 0.0%) |
0 (0.0%) |
|
| etiqueta [character] |
1. motivated | 89 (100.0%) | 0 (0.0%) |
El 8.45% del estudiantado en progreso analizado pertenece a esta categoría (en la clasificación era del 6.55%). Se caracteriza por:
con tasas de rendimiento (eficiencia, éxito y evaluación) superiores al 84% (en la clasificación eran del 94%);
reconocer un 10.55% de los requeridos (en la clasificación era de 11.15);
obtener una nota media de 7.75 (en la clasificación era de 7.97);
con participación en las encuestas de asignaturas (57.07%) y curso (48.87%) y satisfacción media manifestada (media de 3.16 en asignatura. En la clasificación era de 3.2).
A continuación se muestra el detalle la información descriptiva del perfil del estudiantado, incluyendo gráficos para cada variable, las frecuencias para cada valor y las etiquetas de las variables.
# se visualiza
dfSummary(perfil_4_pre,
plain.ascii = FALSE,
style = 'grid',
graph.magnif = 0.85,
varnumbers = FALSE,
valid.col = FALSE,
tmp.img.dir = "/tmp")
Dimensions: 675 x 70
Duplicates: 0
| Variable | Stats / Values | Freqs (% of Valid) | Graph | Missing |
|---|---|---|---|---|
| ste_codalf [numeric] |
Min : 0 Mean : 0.4 Max : 1 |
0 : 410 (60.7%) 1 : 265 (39.3%) |
0 (0.0%) |
|
| sexo [numeric] |
Min : 0 Mean : 0.6 Max : 1 |
0 : 242 (35.9%) 1 : 433 (64.1%) |
0 (0.0%) |
|
| nacionalidad [numeric] |
Min : 0 Mean : 0.9 Max : 1 |
0 : 68 (10.1%) 1 : 607 (89.9%) |
0 (0.0%) |
|
| titulado [numeric] |
1 distinct value | 0 : 675 (100.0%) | 0 (0.0%) |
|
| tasa_eficiencia [numeric] |
Mean (sd) : 84.2 (19.2) min < med < max: 0 < 90 < 100 IQR (CV) : 21.5 (0.2) |
168 distinct values | 0 (0.0%) |
|
| t_exito [numeric] |
Mean (sd) : 92.7 (14.1) min < med < max: 0 < 100 < 100 IQR (CV) : 10.5 (0.2) |
115 distinct values | 0 (0.0%) |
|
| t_evaluacion [numeric] |
Mean (sd) : 89.8 (15.5) min < med < max: 0 < 96.4 < 100 IQR (CV) : 15 (0.2) |
134 distinct values | 0 (0.0%) |
|
| t_rec [numeric] |
Mean (sd) : 10.5 (15.5) min < med < max: 0 < 0 < 80 IQR (CV) : 17.5 (1.5) |
47 distinct values | 0 (0.0%) |
|
| t_sup_req [numeric] |
Mean (sd) : 62.1 (28.3) min < med < max: 0 < 66.7 < 126.7 IQR (CV) : 45 (0.5) |
90 distinct values | 0 (0.0%) |
|
| edad_inicio [numeric] |
Mean (sd) : 33.3 (8.9) min < med < max: 17 < 32 < 62 IQR (CV) : 14 (0.3) |
43 distinct values | 0 (0.0%) |
|
| acceso [numeric] |
Min : 0 Mean : 0.6 Max : 1 |
0 : 289 (42.8%) 1 : 386 (57.2%) |
0 (0.0%) |
|
| complementos [numeric] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 634 (93.9%) 1 : 41 ( 6.1%) |
0 (0.0%) |
|
| tasa_abandono [numeric] |
1 distinct value | 0 : 675 (100.0%) | 0 (0.0%) |
|
| traslado_expediente [numeric] |
1 distinct value | 0 : 675 (100.0%) | 0 (0.0%) |
|
| n_nodos_fin_titulacion [numeric] |
1 distinct value | 0 : 675 (100.0%) | 0 (0.0%) |
|
| duracion_media_estudios [numeric] |
Mean (sd) : 3 (2.1) min < med < max: 1 < 2 < 12 IQR (CV) : 2 (0.7) |
12 distinct values | 0 (0.0%) |
|
| nota_media [numeric] |
Mean (sd) : 7.7 (0.8) min < med < max: 5.2 < 7.8 < 9.8 IQR (CV) : 1.1 (0.1) |
564 distinct values | 0 (0.0%) |
|
| sa_asig_R [numeric] |
Min : 0 Mean : 0.4 Max : 1 |
0 : 436 (64.6%) 1 : 239 (35.4%) |
0 (0.0%) |
|
| sa_asig_participacion [numeric] |
Mean (sd) : 57.1 (31.7) min < med < max: 3.3 < 53.9 < 100 IQR (CV) : 59.7 (0.6) |
191 distinct values | 0 (0.0%) |
|
| sa_asig_organizacion [numeric] |
Mean (sd) : 3.3 (0.8) min < med < max: 1 < 3.4 < 5 IQR (CV) : 0.8 (0.2) |
123 distinct values | 0 (0.0%) |
|
| sa_asig_manual [numeric] |
Mean (sd) : 3 (0.8) min < med < max: 1 < 3.1 < 5 IQR (CV) : 1 (0.3) |
137 distinct values | 0 (0.0%) |
|
| sa_asig_materiales [numeric] |
Mean (sd) : 3 (0.8) min < med < max: 1 < 3.2 < 5 IQR (CV) : 0.9 (0.3) |
127 distinct values | 0 (0.0%) |
|
| sa_asig_actividades [numeric] |
Mean (sd) : 3.1 (0.8) min < med < max: 1 < 3.3 < 4.6 IQR (CV) : 0.9 (0.2) |
126 distinct values | 0 (0.0%) |
|
| sa_asig_docente [numeric] |
Mean (sd) : 3.3 (0.8) min < med < max: 1 < 3.5 < 5 IQR (CV) : 1 (0.3) |
139 distinct values | 0 (0.0%) |
|
| sa_asig_aprendiendo [numeric] |
Mean (sd) : 68.3 (25) min < med < max: 6.2 < 71.4 < 100 IQR (CV) : 40.9 (0.4) |
92 distinct values | 0 (0.0%) |
|
| sa_asig_comentarios [numeric] |
Mean (sd) : 0.1 (0.1) min < med < max: -0.5 < 0.1 < 1 IQR (CV) : 0.1 (1.7) |
77 distinct values | 0 (0.0%) |
|
| sa_curso_R [numeric] |
Min : 0 Mean : 0.3 Max : 1 |
0 : 448 (66.4%) 1 : 227 (33.6%) |
0 (0.0%) |
|
| sa_curso_participacion [numeric] |
Mean (sd) : 48.9 (42.7) min < med < max: 0 < 50 < 100 IQR (CV) : 100 (0.9) |
11 distinct values | 0 (0.0%) |
|
| sa_curso_nivel_academico [numeric] |
Mean (sd) : 3.8 (0.7) min < med < max: 1 < 4 < 5 IQR (CV) : 0.3 (0.2) |
21 distinct values | 0 (0.0%) |
|
| sa_curso_implicacion [numeric] |
Mean (sd) : 4.4 (0.7) min < med < max: 1 < 4.7 < 5 IQR (CV) : 0.7 (0.1) |
15 distinct values | 0 (0.0%) |
|
| sa_curso_aprovechamiento_recursos [numeric] |
Mean (sd) : 3.8 (0.7) min < med < max: 1 < 4 < 5 IQR (CV) : 0.3 (0.2) |
27 distinct values | 0 (0.0%) |
|
| sa_curso_titulacion [numeric] |
Mean (sd) : 3.5 (0.9) min < med < max: 1 < 4 < 5 IQR (CV) : 1 (0.3) |
24 distinct values | 0 (0.0%) |
|
| sa_curso_recomendacion [numeric] |
Mean (sd) : 94.6 (16) min < med < max: 25 < 100 < 100 IQR (CV) : 0 (0.2) |
25.00 : 3 ( 0.4%) 33.33 : 10 ( 1.5%) 40.00 : 3 ( 0.4%) 50.00 : 41 ( 6.1%) 60.00 : 1 ( 0.1%) 66.67 : 11 ( 1.6%) 75.00 : 4 ( 0.6%) 80.00 : 1 ( 0.1%) 100.00 : 601 (89.0%) |
0 (0.0%) |
|
| sa_curso_comentarios [numeric] |
Mean (sd) : 0 (0.1) min < med < max: -0.4 < 0 < 0.9 IQR (CV) : 0 (3.1) |
56 distinct values | 0 (0.0%) |
|
| sa_titulacion_R [numeric] |
1 distinct value | 0 : 675 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_participacion [numeric] |
1 distinct value | 0 : 675 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_nivel_academico [numeric] |
1 distinct value | 4 : 675 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_implicacion [numeric] |
1 distinct value | 5 : 675 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_aprovechamiento_recursos [numeric] |
1 distinct value | 4 : 675 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_mejora_profesional [numeric] |
1 distinct value | 4 : 675 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_obtener_trabajo [numeric] |
1 distinct value | 3 : 675 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_titulacion [numeric] |
1 distinct value | 4 : 675 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_recomendacion [numeric] |
1 distinct value | 100 : 675 (100.0%) | 0 (0.0%) |
|
| sa_titulacion_comentarios [numeric] |
1 distinct value | 0 : 675 (100.0%) | 0 (0.0%) |
|
| il_R [numeric] |
1 distinct value | 0 : 675 (100.0%) | 0 (0.0%) |
|
| il_participacion [numeric] |
1 distinct value | 0 : 675 (100.0%) | 0 (0.0%) |
|
| il_motivo_estudios [numeric] |
1 distinct value | 0 : 675 (100.0%) | 0 (0.0%) |
|
| il_consecuencia_estudios [numeric] |
1 distinct value | 0 : 675 (100.0%) | 0 (0.0%) |
|
| il_trabajo_actual [numeric] |
1 distinct value | 0 : 675 (100.0%) | 0 (0.0%) |
|
| il_trabajo_actual_relacionado_estudios [numeric] |
1 distinct value | 0 : 675 (100.0%) | 0 (0.0%) |
|
| il_comentarios [numeric] |
1 distinct value | 0 : 675 (100.0%) | 0 (0.0%) |
|
| dias_laborable [numeric] |
Mean (sd) : 60.5 (14.1) min < med < max: 0 < 61.2 < 100 IQR (CV) : 8.9 (0.2) |
459 distinct values | 0 (0.0%) |
|
| dias_festivo [numeric] |
Mean (sd) : 39.5 (14.1) min < med < max: 0 < 38.8 < 100 IQR (CV) : 8.9 (0.4) |
459 distinct values | 0 (0.0%) |
|
| horario_mañana [numeric] |
Mean (sd) : 28.5 (15.5) min < med < max: 0 < 25.3 < 100 IQR (CV) : 14.6 (0.5) |
455 distinct values | 0 (0.0%) |
|
| horario_tarde [numeric] |
Mean (sd) : 52.2 (14.6) min < med < max: 0 < 52.2 < 100 IQR (CV) : 9.8 (0.3) |
469 distinct values | 0 (0.0%) |
|
| horario_noche [numeric] |
Mean (sd) : 18.4 (13.8) min < med < max: 0 < 18.3 < 100 IQR (CV) : 12.1 (0.8) |
443 distinct values | 0 (0.0%) |
|
| cen_codnum_11416 [integer] |
Min : 0 Mean : 0.2 Max : 1 |
0 : 571 (84.6%) 1 : 104 (15.4%) |
0 (0.0%) |
|
| cen_codnum_11417 [integer] |
Min : 0 Mean : 0.2 Max : 1 |
0 : 536 (79.4%) 1 : 139 (20.6%) |
0 (0.0%) |
|
| cen_codnum_11418 [integer] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 636 (94.2%) 1 : 39 ( 5.8%) |
0 (0.0%) |
|
| cen_codnum_11419 [integer] |
Min : 0 Mean : 0.5 Max : 1 |
0 : 371 (55.0%) 1 : 304 (45.0%) |
0 (0.0%) |
|
| cen_codnum_11420 [integer] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 586 (86.8%) 1 : 89 (13.2%) |
0 (0.0%) |
|
| any_anyaca_acceso_1965-80 [integer] |
Min : 0 Mean : 0 Max : 1 |
0 : 673 (99.7%) 1 : 2 ( 0.3%) |
0 (0.0%) |
|
| any_anyaca_acceso_1981-95 [integer] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 631 (93.5%) 1 : 44 ( 6.5%) |
0 (0.0%) |
|
| any_anyaca_acceso_1996-2010 [integer] |
Min : 0 Mean : 0.3 Max : 1 |
0 : 442 (65.5%) 1 : 233 (34.5%) |
0 (0.0%) |
|
| any_anyaca_acceso_2011-25 [integer] |
Min : 0 Mean : 0.6 Max : 1 |
0 : 279 (41.3%) 1 : 396 (58.7%) |
0 (0.0%) |
|
| any_anyaca_inicio_2008-13 [integer] |
Min : 0 Mean : 0.1 Max : 1 |
0 : 636 (94.2%) 1 : 39 ( 5.8%) |
0 (0.0%) |
|
| any_anyaca_inicio_2014-19 [integer] |
Min : 0 Mean : 0.6 Max : 1 |
0 : 264 (39.1%) 1 : 411 (60.9%) |
0 (0.0%) |
|
| any_anyaca_inicio_2020-25 [integer] |
Min : 0 Mean : 0.3 Max : 1 |
0 : 450 (66.7%) 1 : 225 (33.3%) |
0 (0.0%) |
|
| pred_rf [factor] |
1. 1 2. 2 3. 3 4. 4 |
0 ( 0.0%) 0 ( 0.0%) 0 ( 0.0%) 675 (100.0%) |
0 (0.0%) |
|
| etiqueta [character] |
1. dissatisfied | 675 (100.0%) | 0 (0.0%) |
Se compara la proporción de cada categoría en el juego de datos original de la clasificación y de la predicción en base a las características principales de los perfiles:
# Comparación clasificación-predicción
comparacion = data.frame(
perfil = c('dropout',
'dropout',
'common_graduate',
'common_graduate',
'motivated',
'motivated',
'dissatisfied',
'dissatisfied'
),
método = c('clasificación',
'predicción',
'clasificación',
'predicción',
'clasificación',
'predicción',
'clasificación',
'predicción'
),
"proporción" = c(paste0(nrow(perfil_1),
" (", round(100*nrow(perfil_1)/nrow(rto_fin_abandono), 2), "%)"),
paste0(nrow(perfil_1_pre),
" (", round(100*nrow(perfil_1_pre)/nrow(rto_progreso), 2), "%)"),
paste0(nrow(perfil_2),
" (", round(100*nrow(perfil_2)/nrow(rto_fin_abandono), 2), "%)"),
paste0(nrow(perfil_2_pre),
" (", round(100*nrow(perfil_2_pre)/nrow(rto_progreso), 2), "%)"),
paste0(nrow(perfil_3),
" (", round(100*nrow(perfil_3)/nrow(rto_fin_abandono), 2), "%)"),
paste0(nrow(perfil_3_pre),
" (", round(100*nrow(perfil_3_pre)/nrow(rto_progreso), 2), "%)"),
paste0(nrow(perfil_4),
" (", round(100*nrow(perfil_4)/nrow(rto_fin_abandono), 2), "%)"),
paste0(nrow(perfil_4_pre),
" (", round(100*nrow(perfil_4_pre)/nrow(rto_progreso), 2), "%)")
),
't_rec' = comparacion_item('t_rec'),
# 't_sup_req' = comparacion_item('t_sup_req'),
# 'titulado' = comparacion_item('titulado'),
# 'n_nodos_fin_titulacion' = comparacion_item('n_nodos_fin_titulacion'),
'nota_media' = comparacion_item('nota_media'),
'tasa_eficiencia' = comparacion_item('tasa_eficiencia'),
't_exito' = comparacion_item('t_exito'),
't_evaluacion' = comparacion_item('t_evaluacion'),
'sa_asig_participacion' = comparacion_item('sa_asig_participacion'),
'sa_asig_docente' = comparacion_item('sa_asig_docente'),
'sa_asig_aprendiendo' = comparacion_item('sa_asig_aprendiendo'),
'sa_curso_participacion' = comparacion_item('sa_curso_participacion'),
'sa_curso_titulacion' = comparacion_item('sa_curso_titulacion')
)
comparacion_t = data.frame(t(comparacion[-1]))
# Añadimos los nombres de las columnas
colnames(comparacion_t) = comparacion[, 1]
# se muestran resultados
datatable(comparacion_t)
# se exportan resultados a latex
# print(xtable(comparacion_t), include.rownames = TRUE)
# Comparación clasificación
comparacion = data.frame(
perfil = c('dropout',
'common_graduate',
'motivated',
'dissatisfied'
),
método = c('clasificación',
'clasificación',
'clasificación',
'clasificación'
),
"proporción" = c(paste0(nrow(perfil_1),
" (", round(100*nrow(perfil_1)/nrow(rto_fin_abandono), 2), "%)"),
paste0(nrow(perfil_2),
" (", round(100*nrow(perfil_2)/nrow(rto_fin_abandono), 2), "%)"),
paste0(nrow(perfil_3),
" (", round(100*nrow(perfil_3)/nrow(rto_fin_abandono), 2), "%)"),
paste0(nrow(perfil_4),
" (", round(100*nrow(perfil_4)/nrow(rto_fin_abandono), 2), "%)")
),
't_rec' = comparacion_item('t_rec'),
# 't_sup_req' = comparacion_item('t_sup_req'),
# 'titulado' = comparacion_item('titulado'),
# 'n_nodos_fin_titulacion' = comparacion_item('n_nodos_fin_titulacion'),
'nota_media' = comparacion_item('nota_media'),
'tasa_eficiencia' = comparacion_item('tasa_eficiencia'),
't_exito' = comparacion_item('t_exito'),
't_evaluacion' = comparacion_item('t_evaluacion'),
'sa_asig_participacion' = comparacion_item('sa_asig_participacion'),
'sa_asig_docente' = comparacion_item('sa_asig_docente'),
'sa_asig_aprendiendo' = comparacion_item('sa_asig_aprendiendo'),
'sa_curso_participacion' = comparacion_item('sa_curso_participacion'),
'sa_curso_titulacion' = comparacion_item('sa_curso_titulacion')
)
comparacion_t = data.frame(t(comparacion[-1]))
# Añadimos los nombres de las columnas
colnames(comparacion_t) = comparacion[, 1]
# se exportan resultados a latex
print(xtable(comparacion_t), include.rownames = TRUE)
comparacion_item = function(x){
resultados = c(paste0(#'Mean (sd): ',
round(mean(perfil_1_pre[[x]], na.rm=TRUE), 1),
' (', round(sd(perfil_1_pre[[x]], na.rm=TRUE), 1),')'),
paste0(#'Mean (sd): ',
round(mean(perfil_2_pre[[x]], na.rm=TRUE), 1),
' (', round(sd(perfil_2_pre[[x]], na.rm=TRUE), 1),')'),
paste0(#'Mean (sd): ',
round(mean(perfil_3_pre[[x]], na.rm=TRUE), 1),
' (', round(sd(perfil_3_pre[[x]], na.rm=TRUE), 1),')'),
paste0(#'Mean (sd): ',
round(mean(perfil_4_pre[[x]], na.rm=TRUE), 1),
' (', round(sd(perfil_4_pre[[x]], na.rm=TRUE), 1),')')
)
return(resultados)
}
# Comparación predicción
comparacion = data.frame(
perfil = c('dropout',
'common_graduate',
'motivated',
'dissatisfied'
),
método = c('predicción',
'predicción',
'predicción',
'predicción'
),
"proporción" = c(paste0(nrow(perfil_1_pre),
" (", round(100*nrow(perfil_1_pre)/nrow(rto_progreso), 2), "%)"),
paste0(nrow(perfil_2_pre),
" (", round(100*nrow(perfil_2_pre)/nrow(rto_progreso), 2), "%)"),
paste0(nrow(perfil_3_pre),
" (", round(100*nrow(perfil_3_pre)/nrow(rto_progreso), 2), "%)"),
paste0(nrow(perfil_4_pre),
" (", round(100*nrow(perfil_4_pre)/nrow(rto_progreso), 2), "%)")
),
't_rec' = comparacion_item('t_rec'),
# 't_sup_req' = comparacion_item('t_sup_req'),
# 'titulado' = comparacion_item('titulado'),
# 'n_nodos_fin_titulacion' = comparacion_item('n_nodos_fin_titulacion'),
'nota_media' = comparacion_item('nota_media'),
'tasa_eficiencia' = comparacion_item('tasa_eficiencia'),
't_exito' = comparacion_item('t_exito'),
't_evaluacion' = comparacion_item('t_evaluacion'),
'sa_asig_participacion' = comparacion_item('sa_asig_participacion'),
'sa_asig_docente' = comparacion_item('sa_asig_docente'),
'sa_asig_aprendiendo' = comparacion_item('sa_asig_aprendiendo'),
'sa_curso_participacion' = comparacion_item('sa_curso_participacion'),
'sa_curso_titulacion' = comparacion_item('sa_curso_titulacion')
)
comparacion_t = data.frame(t(comparacion[-1]))
# Añadimos los nombres de las columnas
colnames(comparacion_t) = comparacion[, 1]
# se exportan resultados a latex
print(xtable(comparacion_t), include.rownames = TRUE)
Se considera que los resultados obtenidos en la predicción de la clasificación de estudiantes en progreso están justificados. Como se ha podido comprobar, hay características de los egresados que definen en gran medida su clasificación y asignación a una etiqueta (por ello, es normal que se haya clasificado al 30.84% del estudiantado en progreso como common_graduate). Al haber optado por aplicar la clasificación en 4 clusters (que divide a los egresados en 3 grupos), hay características que los estudiantes en curso aún no tienen (ni pueden tener) porque no han egresado y son clave en la identificación de su cluster. Esto justifica la variación en proporción de cada agrupación con la clasificación de estudiantes en progreso y cómo la predicción eleva la proporción de estudiantes en riesgo de abandono (59.59%) respecto a la obtenida hasta el momento (25.09%).
El principal beneficio que reporta esta clasificación es la identificación de estudiantes que se encuentran en riesgo de abandono (59.59%) y sobre los que habría que actuar, si no se está haciendo ya, para mitigar dicho riesgo.
Se obtienen las siguientes conclusiones:
Seleccionar el algoritmo de clasificación multiclase adecuado es un factor principal en los problemas de clasificación.
La mayor fiabilidad del proceso se obtiene aplicando un juego de datos normalizado mediante la función scale para que las variables tengan media 0 y desviación típica 1 para que todas las variables aportan la misma importancia. Para poder agrupar los datos, es necesario no tener datos ausentes.
Es necesario probar y comparar el comportamiento de diferentes algoritmos (y ajustar sus parámetros) para escoger el más adecuado según la bondad del modelo sobre el grupo de test (a mayor valor, mayor calidad) y la matriz de confusión.
Para evitar el overfitting se debe aplicar 10-Fold-Cross-Validation, seleccionando el que tenga mayor precisión y menor error promedio.
Por último, en el caso del ejemplo concreto, ha quedado de manifiesto que el algoritmo con mejores resultados y que no reporta overfitting es Random Forest. En cuanto a los resultados obtenidos en la predicción de la clasificación de estudiantes en progreso, se considera adecuada la diferencia de proporción de los grupos y se considera positivo la identificación de estudiantes en riesgo de abandono para poder implementar acciones que mitiguen el riesgo.
Como ha podido comprobarse en la Fase anterior, una vez obtenidos y analizados los resultados del primer modelo ha sido necesario realizar ajustes (excluyendo las variables relacionadas con el egreso/abandono de los estudiantes) para obtener el mejor modelo sobre el que se realiza la evaluación definitiva.
Como ha podido comprobarse, la proporción de resultados en la predicción experimenta:
El principal interés es identificar a los estudiantes en progreso que se encuentran en riesgo de abandono, por lo que la evaluación de los resultados obtenidos aportaría información adicional a la que ya utiliza el Departamento de Atención y Orientación al Estudiante (DAOE) de la Udima según los resultados obtenidos en el Servicio de Prevención del Abandono (SPA). La principal diferencia que aporta este modelo frente a los ya utilizados en SPA es la integración de información procedente de los estudios de satisfacción e inserción laboral realizados al estudiantado.
En los juegos de datos utilizados se han encontrado las siguientes limitaciones que han dado lugar a una definición no homogénea del perfil de ciertos estudiantes:
las variables de utilización de la plataforma de formación moodle (dias_laborable, dias_festivo, horario_madrugada, horario_mañana, horario_tarde, horario_noche) están limitadas a los cursos “2012-13” a “2020-21”;
las variables que provienen de los estudios de satisfacción o de inserción laboral no son constantes en el tiempo:
las variables que se han convertido a dicotómicas (acceso, il_motivo_estudios, il_consecuencia_estudios) o no se han tenido en consideración (plan_estudios) puede que aporten información sustancial de comportamientos del estudiantado que pueden ser evaluados en futuros proyectos.
las técnicas de procesamiento del lenguaje natural NLP (con el diccionario de léxico NRC) aplicadas para extraer la connotación negativa o positiva de los comentarios expresados por los usuarios en las distintas encuestas de satisfacción o estudios de inserción laboral no siempre aportan un valor adecuado asociado al rango -1:1 (donde -1 se corresponde con la máxima connotación negativa y 1 positiva). El Léxico de Sentimientos NRC calcula el valor numérico asociado a los unigramas (tokens) del comentario, evaluándolos de manera aislada por lo que algunos términos pueden ser calificados como positivos cuando en conjunto tienen una carga negativa (p.e. la técnica evaluaría ‘bien desilusionado’ como neutro al analizar por separado la connotación de las palabras: bien, positiva y desilusionado, negativa cuando bien está enfatizando la negatividad), o por ejemplo, las ironías o metáforas que pueden realizarse en este tipo de comentarios no son correctamente evaluadas, obteniendo valoraciones que no se corresponden con el contenido o connotación real del comentario.
Como se ha comprobado, la predicción de la clasificación de estudiantes en progreso se realiza con variables relevantes que no dependen del egreso u abandono de los estudiantes, para que la predicción de los estudiantes en progreso no se vea condicionada por dichas características.
Se considera que la baja participación en las encuestas es una limitación, lo que ha conllevado a la imputación de la mediana (métrica robusta a los outliers) en los ítems (variables) a valorar y en la participación de las encuestas sobre las asignaturas y el curso (no así en el caso de las encuestas de satisfacción con la titulación y la inserción laboral, donde se ha imputado 0).
En esta fase, dado que es un posible proyecto real que dependería de la planificación e intereses de la organización, su puesta en producción no se evaluaría en el alcance del presente estudio. No obstante, vistas las limitaciones anteriores y en caso de la implementación del modelo, se tratarían de minimizar para obtener los mejores resultados posibles y optimizar así los beneficios de su implementación.
En este caso, se revisaría si es necesario realizar ajustes desde la Fase I a la V del presente proyecto para valorar de nuevo los beneficios de su aplicación.
La planificación del despliegue del modelo, detallando cuándo se revisará y mantendrá, así como la comprobación de su correcta aplicación queda fuera del alcance del presente proyecto.
Obtención de datos:
Diseño de código:
Aplicación de técnicas de clasificación y predicción:
Representación de resultados:
Procesamiento del lenguaje natural (NLP):
Chavez, R. (2020) Pre Procesamiento de Datos en R: Variables Dummy (One Hot Encoding). En línea. Recuperado de: https://www.youtube.com/watch?v=WBY9yrSznP4
R CODER (n.d.). Gráfico de correlación en R. En línea. Recuperado de: https://r-coder.com/grafico-correlacion-r/
de la Fuente Fernández, S. (Universidad Autónoma de Madrid). (2011). Análisis Factorial. En línea. Recuperado de: https://www.fuenterrebollo.com/Economicas/ECONOMETRIA/MULTIVARIANTE/FACTORIAL/analisis-factorial.pdf
Ippolito, P. P. (2019). Feature Extraction Techniques. En línea. Recuperado de: https://towardsdatascience.com/feature-extraction-techniques-d619b56e31be
Amat Rodrigo, J. (2017). Análisis de Componentes Principales (Principal Component Analysis, PCA) y t-SNE. En línea. Recuperado de: https://www.cienciadedatos.net/documentos/35_principal_component_analysis
Gil Martínez, C. (2017). Análisis de Componentes Principales (PCA). En línea. Recuperado de: https://rpubs.com/Cristina_Gil/PCA
df_factoresscience+. (2016). Implementing Apriori Algorithm in R. En línea. Recuperado de: https://df_factoresscienceplus.com/implementing-apriori-algorithm-in-r/
JPAG. (2021). Clustering: Agrupación de muestras en función de su similitud. En línea. https://rstudio-pubs-static.s3.amazonaws.com/784966_e639fd552bf74123b3ddb6391e8a8191.html
Universidad de Murcia. Caso práctico resuelto: Análisis de conglomerados. En línea. Recuperado de: https://www.um.es/estadempresa/multivarianteR/CLUS/caso_CLUS.html#etapa_4_selecci%C3%B3n_de_la_medida_de_similitud_y_la_t%C3%A9cnica_de_agrupaci%C3%B3n
Delgado, R. (2018). Introducción a los Modelos de Agrupamiento (Clustering) en R. En línea. Recuperado de: https://rpubs.com/rdelgado/399475
Ciencia social abierta. Taller RMarkdown. En línea. https://cienciasocialabierta.netlify.app/assignment/taller_rmarkdown/taller_rmarkdown
Amat Rodrigo, J. (2018). Reglas de asociación y algoritmo Apriori con R. En línea. Recuperado de: https://www.cienciadedatos.net/documentos/43_reglas_de_asociacion#Reglas_de_asociaci%C3%B3n
Roman, V. (Medium) (2019). Aprendizaje Supervisado: Introducción a la Clasificación y Principales Algoritmos. En línea. Recuperado de: https://medium.com/datos-y-ciencia/aprendizaje-supervisado-introducci%C3%B3n-a-la-clasificaci%C3%B3n-y-principales-algoritmos-dadee99c9407
Villalba, F. (2018). Aprendizaje supervisado en R. En línea. Recuperado de: https://fervilber.github.io/Aprendizaje-supervisado-en-R/
Paredes Inilupu, D. (2020). Capítulo 10: Aprendizaje Supervisado. En línea. Recuperado de: https://bookdown.org/dparedesi/data-science-con-r/aprendizaje-supervisado.html
Alcántara Rosas, L. A. (2019). Medium: Algoritmo K-Fold Cross Validation para Machine Learning en R: De la teoría a la práctica. En línea. Recuperado de: https://medium.com/@alcantararosas/algoritmo-k-fold-cross-validation-para-machine-learning-en-r-de-la-teor%C3%ADa-a-la-pr%C3%A1ctica-d4c54ab82a93